【问题标题】:SQL Insert record if doesn't exist如果不存在 SQL 插入记录
【发布时间】:2013-03-11 19:02:59
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server-2008-r2 sql-insert


    【解决方案1】:

    在子查询中废弃内部连接。

    您应该尝试以下内容:

     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)
    

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

    【讨论】:

      【解决方案2】:

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

      所以我假设您使用临时表作为参考,并且仅在临时表中存在记录的情况下才将记录添加到临时表中

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

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

      【讨论】:

        【解决方案3】:

        不存在,试试

        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)
        

        【讨论】:

        • 感谢您的帮助!不能在我也想检查日期的情况下使用吗?那么只有在产品代码和日期不存在与当前日期在同一条记录中时才插入?
        • 否,NOT IN 将一项的值与返回一列的 SELECT 语句的结果进行比较。如果你需要检查多个值是否存在,你最好回到 NOT EXISTS
        【解决方案4】:

        试试这个……

        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) 
        

        【讨论】:

          猜你喜欢
          • 2014-04-04
          • 2011-07-01
          • 1970-01-01
          • 2021-09-03
          • 2022-06-10
          • 1970-01-01
          • 1970-01-01
          • 2013-11-15
          • 2018-10-08
          相关资源
          最近更新 更多