1

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

请参阅这个新的SQLFiddle

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

这对于作为常规元素的子元素的特定于客户端的元素非常有效。

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

我在表中添加了一个“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 行
4

1 回答 1

0

为什么不像这样简单:

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)
于 2013-10-01T12:38:06.223 回答