SQL插入记录如果不存在

问题描述:

我想要做的是将表与另一个临时表进行比较,如果该记录不存在,则将其插入表中。我的问题是IF NOT EXIST似乎不正确。如果我拉的代码分开我的问题是:SQL插入记录如果不存在

返回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

在你的子查询中删除你的内部连接。

什么,你应该尝试如下:

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) 

尝试这些,看看他们的工作。

反而不是存在,尝试

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) 
+0

为什么这个工作比NOT EXISTS更好? – 2013-03-11 19:16:30

+0

谢谢,已经帮了很多!不能在我想检查日期的情况下使用吗?那么只有在产品代码和日期不存在于同一记录中的当前日期的情况下才能插入? – user2158168 2013-03-11 19:20:34

+0

否,NOT IN将一个项目的值与返回一列的SELECT语句的结果进行比较。如果你需要检查多个值的存在,你最好回到NOT EXISTS – Melanie 2013-03-12 13:55:42

试试这个...

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) 

你不需要都存在,并且内部连接的情况下,你的产品代码定义中均有记载表。

,所以我想你正在使用临时表作为参考,从临时表只有在情况下,它只能在临时表中存在增加记录表

所以您的查询应该是这样

insert into no_stock 
select * from #no_stock 
where product_code not in (select product_code from no_stock)