有不同身份的父母

时间:2015-07-02 13:49:59

标签: sql sql-server-2008 parent-child

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

以下是数据示例:

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

如何获得所需的结果(表2)?

1 个答案:

答案 0 :(得分:1)

你很亲密,但不准确。试试这个:

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