我有两张桌子,例如:

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   |

tablefirstfile是我的源表,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;

08-06 16:45