父行、子行和孤立行的SQL自联接

父行、子行和孤立行的SQL自联接,sql,self-join,Sql,Self Join,我不确定这里的程序是什么——这个问题几乎是这个问题的直接延续。然而,引入了一个新的需求,可能需要一个完全不同的解决方案。这就是生活 看看这个新的 原始解决方案获取给定客户端ID的所有元素,除非该元素被“父元素ID”指示的“子”元素取代 这适用于特定于客户端的元素,这些元素是常规元素的子元素 但是,我现在必须管理特定于客户端的元素,这些元素不是常规元素的子元素。而原始查询没有获取它们 我已经向表中添加了一个“NewThing”行,其中有一个客户端ID,没有父元素ID,但是为了获取它,我必须与另一个

我不确定这里的程序是什么——这个问题几乎是这个问题的直接延续。然而,引入了一个新的需求,可能需要一个完全不同的解决方案。这就是生活

看看这个新的

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

这适用于特定于客户端的元素,这些元素是常规元素的子元素

但是,我现在必须管理特定于客户端的元素,这些元素不是常规元素的子元素。而原始查询没有获取它们

我已经向表中添加了一个“NewThing”行,其中有一个客户端ID,没有父元素ID,但是为了获取它,我必须与另一个select联合。我知道这可能不是最好的方法,但是我不知道如何修改原始查询

因此,在上面的SQLFIDLE中,我如何编写一个SQL查询来接受“client ID”参数(可能为NULL)并返回:

  • 对于客户端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)