不同身份的亲子
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
这不是基本的父子层次结构,而是更复杂的层次结构。
这是一个数据示例:
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