2015-03-03 38 views
0

有人可以解释为什么最后一条语句没有列出所有位于#inv_item但不在salesMasterDET中的ST项目吗?我使用的是SQL 2008 R2WHERE xxx NOT IN ...不返回任何东西

如果我填充一个临时表: SELECT DISTINCT(产品代码)INTO #smd_item FROM salesMasterDET 我运行相同的选择,S1-S4但与临时表,一切工作正常。

S1:SELECT DISTINCT(项目)FROM #inv_item

S2:SELECT DISTINCT(产品代码)FROM salesMasterDET

S3:SELECT DISTINCT(项目)FROM #inv_item其中项目IN(SELECT的ProductCode FROM salesMasterDET)

S4:SELECT DISTINCT(项目)FROM #inv_item其中项目NOT IN(SELECT ProductCode与salesMasterDET)

结果:

S1:ST01 ST02 ST03 ST04 ST05 ST11 ST12

S2:ST04 ST12

S3:ST04 ST12

S4:(没有结果)(期望ST01,ST 02,,,ST11)

+0

如果您运行查询'SELECT * FROM salesMasterDET WHERE ProductCode IS NULL'是否返回任何结果?如果是这样,那就是问题所在。与'NULL'相比,没有值会从'NOT IN'返回。您可以将查询更改为'SELECT DISTINCT(Item)FROM #inv_item其中,商品NOT IN(SELECT ProductCode FROM salesMasterDET WHERE ProductCode IS NOT NULL)' – 2015-03-03 03:40:38

+0

我通常从这些表中删除空值,并没有考虑到它的结尾,但有空值。问题解决了。简单的答案和理由。谢谢阿德里安。 – user3651072 2015-03-03 20:25:21

回答

0

我敢打赌,你应该扭转二元操作。

S4: SELECT DISTINCT(Item) FROM #inv_item where NOT Item IN (SELECT ProductCode FROM salesMasterDET)