gpt4 book ai didi

mysql - SQL Query to JOIN based on Hierarchical data

转载 作者:行者123 更新时间:2023-11-29 02:48:59 25 4
gpt4 key购买 nike

好的,所以关注 this question ,我已经意识到我正在尝试的 JOIN 不幸的是不是那么直接。

为了修改之前的查询,表中的外键创建了一个层次结构,并且仅当条目位于顶层时才填充引用。

所以我需要实现的是获取电缆的 area.name(使用 this fiddle )条目,但我不需要选择中的其余层次结构。

显然,我之前的尝试忽略了 major_parent 字段有时为空的事实。

这是我的原始查询:

SELECT
C.name,
S.name AS Origin,
M.area AS OriginArea
FROM cable C
INNER JOIN sub S ON C.sub = S.sub_id
INNER JOIN major M ON S.major_parent = M.major_id
WHERE
# Parameters
;

最佳答案

这是 fiddle对于这个查询:

SELECT
cable.`name`,
sub.`name`,
major.`name`,
major.area
FROM
cable
INNER JOIN sub
ON cable.sub = sub.sub_id
LEFT JOIN sub AS parent
ON parent.sub_id = sub.sub_parent
INNER JOIN major
ON major.major_id = COALESCE (parent.major_parent,sub.major_parent)
INNER JOIN area
ON area.area_id = major.area

这样你的层次结构就变成了可选的东西。如果 sub 中的条目有一个父项,左连接将找到它,如果没有,左连接将返回 nullCOALESCE (parent.major_parent, sub.major_parent) 将跳过 null 并使用 sub.major_parent 加入 major 表。

编辑

我想我通过使用 sub_parent = major_parent 搞砸了与父子的连接。应该是 sub_parent = sub_id 不是吗?

LEFT JOIN sub AS parent 
ON parent.sub_id = sub.sub_parent

还将其添加到顶部的整个查询中。

关于mysql - SQL Query to JOIN based on Hierarchical data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38114439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com