不同身份的亲子

Parent child with different status

这不是基本的父子层次结构,而是更复杂的层次结构。

这是一个数据示例:

id   parent_id   status
-----------------------
 10          10      on
 11          10     off
 12          12     off
 13          13      on

我想要的是离线数据(id 11和12)。我的问题在于 id 11 的父级具有 'on' 状态,这也应该被采用。

期望的结果是:

id   parent_id   status
-----------------------
 10          10      on
 11          10     off
 12          12     off

我写的是:

SELECT t1.id, t1,parent_id
FROM t1
LEFT JOIN t1 t11 ON t11.id = t1.parent_id
WHERE ((t1.status = 'off' AND t11.status='off') 
       OR (t1.status = 'off' AND t11.status='on'))
ORDER BY t1.parent_id, t1.id

对于此查询,我没有 t1 和 t11 状态等于 'on' 的行(这是必需的)。

这个输出是:

id   parent_id   status
-----------------------
(10)        (10)    (on) -- missing row 
 11          10     off
 12          12     off

如何得到想要的结果(table 2)?

你很接近,但不准确。试试这个:

SELECT t1.id, t1,parent_id
FROM t1
LEFT JOIN t1 t11 ON t1.id = t11.parent_id
WHERE t1.status = 'off' OR t11.status='off'
ORDER BY t1.parent_id, t1.id