6

我要做的是将一个表与另一个临时表进行比较,如果该记录尚不存在,则将其插入表中。我的问题是 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)

附言。使用 SQL Server 2008 R2

4

4 回答 4

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)

试试这些,看看它们是否有效。

于 2013-03-11T19:12:32.310 回答
2

如果您的 product_code 在两个表中定义记录,则不需要同时存在和内部连接。

所以我想你正在使用临时表作为参考,并仅在临时表中添加记录的情况下它只存在于临时表中

所以你的查询应该是这样的

 insert into no_stock
 select * from #no_stock
 where product_code not in (select product_code from no_stock)
于 2013-03-11T19:11:29.407 回答
0

而不是不存在,尝试

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)
于 2013-03-11T19:09:49.827 回答
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) 
于 2013-03-11T19:10:34.910 回答