我在postgresql中有一个查询,它生成:

statusid,qty
17        25
          30
17        45
18        20

我想删除所有statuisdeleted17)的行,并保留NULL的行。
我所做的是:
WHERE statuid not in (select statusid from statuses where statusname='deleted')

我期望的是:
statusid,qty
          30
18        20

但我得到的是:
statusid,qty
18        20

有没有其他的接线员可以得到这个指定的结果?

最佳答案

不能将NULL与任何值进行比较(NOT IN比较),必须使用IS NULL

WHERE statusid IS NULL OR  statusid not in (select statusid from statuses where statusname='deleted')

NULL既不等于也不等于任何其他值,即使使用NULL。它是未定义的。

10-06 13:55