我有两张桌子,例如:
Table firstfile Table secondfile
=============== ================
Emplid | Color Emplid | Color |status
------------------- -------------|---------|------
123 | red 123 | red |
456 | green 456 | Green |
789 | black 000 | red |
777 | orange 789 | black |
999 | white |
table
firstfile
是我的源表,secondfile
是目标表。现在我需要一个查询来查找firstfile
中表secondfile
中不存在的所有行。所以我需要一个查询来找到以下信息:Table secondfile
================
Emplid | Color | Status
-------------------------------
123 | red |
456 | Green |
000 | red |
789 | black |
999 | white |
777 | orange | Removed
对于这种
CASE WHEN
格式的查询,什么是一种好的方法?我试过但没用:
UPDATE second file
set status = (CASE
WHEN first file.Emplid not In (select Emplid
from secondfile)
THEN 'Remove'
END);
最佳答案
不能UPDATE
不存在的行,可以INSERT
一个新行。
您可以使用NOT IN
函数:
INSERT INTO secondfile
SELECT f.Emplid,f.Color, 'Removed'
FROM firstfile f
WHERE f.Emplid NOT IN (SELECT 1 FROM secondfile s WHERE f.Emplid=s.Emplid)
或者使用
NOT EXISTS
函数:INSERT INTO secondfile
SELECT f.Emplid,f.Color, 'Removed'
FROM firstfile f
WHERE NOT EXISTS(SELECT s.Emplid FROM secondfile s)
您也可以使用
JOIN
:INSERT INTO secondfile
SELECT f.Emplid,f.Color, 'Removed'
FROM firstfile f
LEFT OUTER JOIN secondfile s ON f.Emplid = s.Emplid
WHERE s.Emplid IS NULL;