繁体   English   中英

父行,子行和孤立行的SQL自连接

[英]SQL self join for parent, child and orphan rows

我不知道这个程序是什么在这里-这个问题是相当多的直接延续这一个 但是,引入了新的要求,很可能需要完全不同的解决方案。 这就是生活。

请参阅此新的SQLFiddle

原始解决方案将获取给定客户端ID的所有元素,除非该元素被“父”元素ID所指示的“子”元素取代。

这对于作为常规Elements的子级的特定于客户的Elements来说效果很好。

但是,我现在必须管理不是常规Elements的子代的特定于客户的Elements。 并且原始查询没有获取它们。

我在表中添加了“ NewThing”行-带有客户端ID,没有parent_element ID-但要获取该行,我必须与另一个选择合并。 我知道这可能不是最好的方法,但是无法弄清楚如何修改原始查询。

因此,在上面的SQLFiddle中,如何编写一个将接受“客户端ID”参数(可能为NULL)的SQL查询并返回:

  • 对于客户端ID 1,第2、4和5行
  • 对于客户端ID 2,第3和第4行
  • 对于客户端ID 42,第1行和第4行
  • 对于客户端ID NULL,行1和4

为什么不像这样简单:

SELECT  mm.*, md.label AS standardized_label FROM mytable md
LEFT JOIN
        mytable mc
ON      mc.parent_element = md.id
        AND mc.client = 1
JOIN    mytable mm
ON      mm.id = COALESCE(mc.id, md.id)
WHERE   md.client IS NULL or (md.client = 1 and md.parent_element IS NULL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM