SQL - 检查新行的表?

4 sql

我有两张桌子,例如:

Table A                                  Table B
=======                                  =======

Name         | Color                     Name         | Color
----------------------                   ----------------------
Mickey Mouse | red                       Mickey Mouse | red
Donald Duck  | green                     Donald Duck  | blue
Donald Duck  | blue                      Minnie       | red
Goofy        | black
Minnie       | red
Run Code Online (Sandbox Code Playgroud)

表A是我的源表,B是目标表.现在我需要一个查询来查找表A中的所有不同(附加)行,因此可以使用这些行更新表B. 所以我需要一个查询,它从表A中找到以下行:

Name         | Color  
----------------------
Donald Duck  | green  
Goofy        | black
Run Code Online (Sandbox Code Playgroud)

这种查询的好方法是什么?它应尽可能高效(避免过多的连接).谢谢你的帮助!

dpm*_*gly 9

我会使用NOT EXISTS结构.

SELECT Name, Color
FROM TableA
WHERE NOT EXISTS (
SELECT 1 FROM TableB
WHERE TableA.Name = TableB.Name 
AND TableA.Color = TableB.Color)
Run Code Online (Sandbox Code Playgroud)

  • NOT EXISTS使用相关子查询,因此在较大的数据集上,它明显快于"NOT IN". (2认同)

Jus*_*anz 7

SELECT a.Name, a.Color
FROM a LEFT OUTER JOIN b ON (a.Name = b.Name AND a.Color = b.Color)
WHERE b.Name IS NULL AND b.Color IS NULL
Run Code Online (Sandbox Code Playgroud)