postgresql中的NOT IN子句

时间:2014-06-09 14:21:50

标签: sql postgresql

我正在尝试使用NOT IN子句限制选择。

这就是我想要做的事情:

SELECT name,id
 from "Schemas"."Paths" 
 where id not in(
   select  parent from "Schemas"."Paths"
   )

但这给了我一张空桌子。

我在这张桌子上有824行,当我尝试这个时:

SELECT name,id
 from "Schemas"."Paths" 
 where id in(
   select  parent from "Schemas"."Paths"
   )

我有182行表。

我错过了什么,但是什么?

1 个答案:

答案 0 :(得分:0)

您的Paths中至少有一个空父母。根据您打算如何使用父母,可以直接过滤掉这些内容(例如使用WHERE parent IS NOT NULL),也可以使用COALESCE之类的投影将这些内容映射到确实存在的内容:

SELECT name,id
 from Paths 
 where id not in (
   select COALESCE(parent, 0) from Paths
);

SqlFiddle显示当序列包含null时NOT IN如何返回零行。