Table A: no (PK), name, status
Table B: no (PK), name
將 B 表中 **A 表不存在的 no** 記錄插入 A 表,status 固定為 'Add'。
INSERT INTO A(no,name,status) VALUES (SELECT no,name,'Add' FROM B WHERE B.no NOT IN (SELECT no FROM A))
-- 語法錯誤:VALUES 後不能接 SELECT
INSERT INTO A (no, name, status)
SELECT no, name, 'Add'
FROM B
WHERE B.no NOT IN (SELECT no FROM A);
INSERT INTO A (no, name, status)
SELECT b.no, b.name, 'Add'
FROM B b
WHERE NOT EXISTS (SELECT 1 FROM A a WHERE a.no = b.no);
NOT EXISTS 在 B 表大、A 表有索引時通常更快,且正確處理 NULL 值 (若 no 允許 NULL,NOT IN 會誤判)。
MERGE INTO A USING B
ON (A.no = B.no)
WHEN NOT MATCHED THEN
INSERT (no, name, status) VALUES (B.no, B.name, 'Add');
單一陳述式完成「存在則更新、不存在則插入」,避免競爭條件。
INSERT INTO A (no, name, status)
SELECT no, name, 'Add' FROM B
ON DUPLICATE KEY UPDATE name = VALUES(name), status = 'Update';