我有两张桌子,例如:
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 :(得分: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 JOIN
和IS 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()