2016-12-22 43 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

沒有先生,我想插入一個記錄,不存在第二個文件狀態'刪除' 但與這個查詢我得到所有已經存在的記錄'已刪除' –