奇怪的不是操作员行为

时间:2011-07-28 21:16:29

标签: sql postgresql

SELECT something FROM somewhere WHERE something IN (a, b, c)

产生正常结果,

SELECT something FROM somewhere WHERE something NOT IN (a, b, c)

应该从表某处中的列某些给我所有结果,但它给了我比表中更多的随机重复行。互联网上NOT IN的所有例子都是文字串,而我正在使用数字,有什么不同吗?

2 个答案:

答案 0 :(得分:4)

如果没有“真正的”查询,很难说出发生了什么......

Tat说,并在Michael的回答中添加,确保not in子句中没有空值,因为语义与看似相反的in子句的语义完全不同:

select a from b where a in (1, null);     -- rows where a = 1
select a from b where a not in (1, null); -- no rows, since x <> null is null

答案 1 :(得分:1)

在结果中接收“多次”行几乎总是不正确连接的结果。检查FROM子句中的JOIN语句和/或您在WHERE子句中指定的任何表关系。

确保您没有在FROM子句中包含任何未正确连接到SELECT语句中其他表的表。

祝你好运!