基于分层数据的SQL查询JOIN

Ben

好的,所以在回答了这个问题之后,我意识到我正在尝试的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具有父项,则左联接将找到它,如果不是,则左联接将返回,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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章