我要做的是将表与另一个临时表进行比较,如果记录尚未存在,请将其插入表中。我的问题是IF NOT EXIST似乎不正确。如果我将代码分开,我遇到的问题是:
返回29个结果:
SELECT *
from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE.
这不会返回任何结果(我希望这会返回34):
SELECT PRODUCT_CODE
FROM #no_stock
WHERE NOT EXISTS
(SELECT * from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
返回63:
SELECT PRODUCT_CODE
FROM #no_stock
WHERE EXISTS
(SELECT * from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
PS。使用SQL Server 2008 R2
答案 0 :(得分:6)
在子查询中删除内部联接。
您应该尝试的是以下内容:
SELECT PRODUCT_CODE FROM #no_stock
WHERE NOT EXISTS (SELECT * from NO_STOCK
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
此处不需要内部联接,因为外部查询中引用了#no_stock表。
您的其他查询也是如此:
SELECT PRODUCT_CODE FROM #no_stock
WHERE EXISTS (SELECT * from NO_STOCK
WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
尝试这些并查看它们是否有效。
答案 1 :(得分:2)
如果你的product_code定义了两个表中的记录,你就不需要存在和内连接。
所以我假设您正在使用临时表作为引用,并且仅在临时表中仅存在记录时将记录添加到表中
所以你的查询应该是
insert into no_stock
select * from #no_stock
where product_code not in (select product_code from no_stock)
答案 2 :(得分:0)
而不是NOT EXISTS,尝试
WHERE Product_Code NOT IN (SELECT Product_Code FROM NO_STOCK INNER JOIN #no_stock ON NO_STOCK.PRODUCT_CODE #no_stock.PRODUCT_CODE WHERE NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)
答案 3 :(得分:0)
试试这个......
SELECT PRODUCT_CODE FROM #no_stock
WHERE NOT EXISTS (SELECT * from NO_STOCK INNER JOIN #no_stock
ON NO_STOCK.PRODUCT_CODE = #no_stock.PRODUCT_CODE)