2011-07-28 47 views
1
SELECT something FROM somewhere WHERE something IN (a, b, c) 

产生正常的结果,而且,奇怪NOT IN操作符行为

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

应该给我从柱东西所有结果表地方,但它给了我很多次以上随机重复行比在桌子上。互联网上的所有NOT IN例子都带有文本字符串,我正在处理数字,有什么不同吗?

+3

您的'select'语句真的很简单,还是加入多个表? – meagar

+1

没办法。你的数据一定有问题。 ** IN/NOT IN **操作应该像您所描述的那样行事。 –

+0

另外,在数字中没有使用'not in()'的特殊规则,它的行为与预期完全相同。请更新问题以包含您的实际查询,因为按照现状,您的问题不能回答 - “in/not in”只是不按照您描述的方式行事。 – meagar

回答

1

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

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

祝你好运!

+0

嗯,如何测试没有不正确的连接,当postgresql不给我任何错误和IN测试返回我正确的结果。 – Euphorbium

4

没有“真正”的查询,很难说这是怎么回事...

达说,并增加了迈克尔的回答,请务必不要在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 
+0

null既不匹配也不匹配一个值 - 即任何测试(除'null之外)都是错误的。如果列表中只有一个值为空,则比较将始终为假 – Bohemian