首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL INSERT INTO SELECT 語句中 WHERE 子句引用目標表導致錯誤

     編輯:程式設計綜合問答

錯誤 SQL

INSERT INTO Tab_Checksum ([name], checkdate, ...)
SELECT [name], checkdate, SUM(startclass), ...
FROM Tab_Check
WHERE Tab_Checksum.checkdate != Tab_Check.checkdate  -- 錯誤:目標表不可引用
GROUP BY [name], checkdate;

錯誤原因

INSERT INTO ... SELECT 語法中,SELECT 子句只能引用源表(此處為 Tab_Check)的列。目標表 Tab_Checksum 尚未插入數據,無法在 WHERE 中引用其列。

修正思路

  1. 若需去重:使用 NOT EXISTS 或 LEFT JOIN ... WHERE t2.id IS NULL 判斷源表數據是否已存在目標表。
    INSERT INTO Tab_Checksum (...)
    SELECT t1.[name], t1.checkdate, ...
    FROM Tab_Check t1
    WHERE NOT EXISTS (
        SELECT 1 FROM Tab_Checksum t2
        WHERE t2.[name] = t1.[name] AND t2.checkdate = t1.checkdate
    )
    GROUP BY t1.[name], t1.checkdate;
  2. 若需增量同步:對比主鍵或時間戳,僅插入新增/修改記錄。

核心原則

INSERT ... SELECT 的 WHERE/ON 子句僅能引用源表別名,不可引用目標表。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved