寻找在亲子关系中排除的孩子

时间:2016-05-24 19:20:53

标签: sql

我有一个表X,其中有一个由parent_id属性处理的自身的一对多父子关系。

| id | parent_id | type |
|----|-----------|------|
| 1  | -         | A    |
| 2  | -         | A    |
| 3  | -         | A    |
| 4  | 1         | B    |
| 5  | 1         | C    |
| 6  | 2         | B    |
| 7  | 3         | C    |

我想获得A类的所有行,它们不具有类型B的任何子行。获取这些行的SQL查询是什么?

1 个答案:

答案 0 :(得分:2)

SELECT 
    *
FROM
    x AS t1
WHERE
    t1.type = 'a'
        AND 0 = (SELECT 
            COUNT(*)
        FROM
            x AS t2
        WHERE
            t2.id_parent = t1.id AND t2.type = 'b')