我该如何选择不用于另一行的值?

时间:2018-10-06 15:03:06

标签: mysql sql

这是我的桌子t1

| postid | type | parentid |
| 1      |  Q   |   null   |
| 2      |  A   |   1      |
| 3      |  Q   |   null   |
| 4      |  Q   |   null   |
| 5      |  A   |   5      |
| 6      |  Q   |   null   |
| 7      |  Q   |   null   |
| 8      |  Q   |   null   |
| 9      |  A   |   8      |
| 10     |  A   |   8      |
| 11     |  Q   |   null   |
| 12     |  Q   |   null   |
| 13     |  Q   |   null   |
| 14     |  A   |   13     |
| 15     |  A   |   13     |

所以在上表中,1是帖子ID和一个父Q,它是A的父ID,帖子ID为2

现在,我想标识Q类型的帖子ID,该ID不是任何人的父母。

就像您观察上面的表格一样,我想选择3、6、7、11、12。因此,我该如何编写查询以实现上述结果。

3 个答案:

答案 0 :(得分:1)

您可以使用NOT IN来完成

SELECT * FROM yourtable t1 WHERE t1.postid NOT IN
(SELECT parentid FROM yourtable t2 WHERE parentid IS NOT NULL)

答案 1 :(得分:1)

SELECT t1.*
FROM table t1
LEFT JOIN table t2 ON t1.postid=t2.parentid 
WHERE t2.postid is null AND t1.type='Q'

答案 2 :(得分:1)

NOT EXISTS听起来很正确

SELECT *
FROM t1
WHERE type = 'q'
AND NOT EXISTS (
    SELECT 1
    FROM t1 AS x
    WHERE x.parentid = t1.postid
)