SQL - 检查和更新新行的表?

时间:2016-12-22 10:14:17

标签: mysql 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)

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

尝试使用以下列方式使用LEFT JOINIS NULL,您可以检查第一个文件中不存在但在第二个文件中不存在的记录,它会更新相同的记录结果集

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

答案 2 :(得分:0)

您可以使用Nil并执行以下操作:

NOT EXISTS()