2016-12-22 44 views
3

我有两个表,例如:SQL - 比较和更新表的行数?

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 | 

firstfile是我的源表和secondfile是目标表。现在我需要一个查询,查找表secondfile中不存在的firstfile中的所有行。所以,我需要它找到我下面的查询:

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); 
+0

你需要一个'update'查询或一个'select'查询? – user3378165

+0

@ user3378165我想要更新那些存在于firstfile但不在secondfile中的记录。 secondfile中的这些记录的状态应该为“已删除” –

+0

您的问题不清楚,请更明确一点! –

回答

1

你不能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; 
+0

谢谢先生。 JOIN查询工作。然而,前两个有一些错误如下: - 与NOT IN,错误重复条目'352679'的关键'PRIMARY' 与NOT EXIST没有错误,但输出没有一个单一的状态列中删除 –

+0

好吧,我很高兴至少有一个人工作:) – user3378165

0

我想你实际上是在寻找一个INSERT而不是UPDATE

INSERT INTO secondfile (Emplid, Color, Status) 
SELECT EmplId, Color, 'Removed' 
FROM firstfile AS t1 
WHERE NOT EXISTS (SELECT 1 
        FROM secondfile AS t2 
        WHERE t1.Emplid = t2.Emplid AND t1.Color = t2.Color) 
+0

我试过,但所有的记录有他们的状态栏作为'删除' –

+0

@Sharik我认为这是你的意图 –

+0

没有先生,我想插入一个记录,不存在第二个文件状态'删除' 但与这个查询我得到所有已经存在的记录'已删除' –