好的,所以在回答了这个问题之后,我意识到我正在尝试的JOIN并不是那么简单。
为了修改上一个查询,表中的外键创建了一个层次结构,并且仅当该条目位于顶层时才填充引用。
因此,我需要实现的是获取area.name
电缆连接(使用此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
;
这是此查询的小提琴:
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
具有父项,则左联接将找到它,如果不是,则左联接将返回,null
但COALESCE (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
还将其添加到整个查询的顶部。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句