2016-12-22 31 views
0

我有兩個表,例如:SQL - 檢查並更新新表的行數?

Table firstfile      Table secondfile 
===============      ================ 

Emplid | Color      Emplid  | Color |status 
----------------------    -------------|---------|------ 
123  | red      123   | red  | 
456  | green      456   | Green | 
789  | black      000   | red  | 
            789   | black | 
            999   | white | 

表firstfile是我的源表和secondfile是目標表。現在我需要一個查詢來查找表secondfile中的所有不同(額外)行。所以我需要一個查詢,找到我以下內容:

Table secondfile 
================ 

Emplid  | Color | Status 
------------------------------- 
123   | red  | 
456   | Green | 
000   | red  | added 
789   | black | 
999   | white | added 

這樣的查詢的好方法是什麼?

我試過,但它不工作

UPDATE secondfile 
INNER JOIN firstfile 
    ON secondfile.Emplid = firstfile.Emplid 
SET status = (CASE WHEN secondfile.Emplid != firstfile.Emplid THEN 'Added' END) 
+0

您無法同時更新和加入。 – Setop

+0

誰說的?嘗試我的代碼 – Susang

回答

1

試試這個

UPDATE secondfile  
    SET status = 'Added' 
    WHERE secondfile.Emplid NOT IN(select Emplid from firstfile) 

樣品申請案

UPDATE secondfile 
SET status =  CASE 
         WHEN Emplid= 10 THEN 'JustAdded' 
         WHEN Emplid= 20 THEN 'NewlyAdded' 
         WHEN Emplid= 30 THEN 'Old' 
         ELSE 'Added' 
        END  
WHERE secondfile.Emplid not in (select Emplid from firstfile) 
+0

這工作得很好。我們是否可以修改這個查詢來使用CASE WHEN ...我還有其他的例子可以使用它。 謝謝 –

+0

是的,你能證明這種情況嗎? – Balan

+0

非常感謝。我嘗試了這一點,它工作正常更新secondfile設置狀態=(CASE WHEN secondfile.Emplid不在(從firstfile選擇Emplid)然後'添加'結束); –

0

使用LEFT JOIN試試這個在下面的方式與IS NULL,你可以檢查其是否在firstfile,但在第二個存在的記錄,它會更新同樣的結果集

UPDATE secondfile 
LEFT JOIN firstfile ON secondfile.Emplid = firstfile.Emplid 
SET status = 'Added' 
WHERE firstfile.Emplid IS NULL 

在你的代碼使用secondfile.Emplid != firstfile.Emplid這將永遠不會滿足於INNER JOIN,這個連接總是返回匹配只有數據,在你的情況下它會返回兩個表中存在的數據。

可以使微小的變化在您的查詢,如下:

UPDATE secondfile 
LEFT JOIN firstfile ON secondfile.Emplid = firstfile.Emplid 
SET status = CASE WHEN secondfile.Emplid != firstfile.Emplid THEN 'Added' ELSE status END 
+0

以下我剛剛嘗試過,狀態欄中的所有字段都更新爲「添加」。不工作 –

+0

對不起,我必須保持條件在WHERE子句..很抱歉,請再試一次。 – Susang

0

您可以使用NOT EXISTS()和做類似這個:

UPDATE secondfile  
SET status = 'Added' 
WHERE NOT EXITS( 
        select 1 
        from firstfile 
        where Emplid= secondfile.Emplid 
                )