查找表1中表2中不存在并返回所有字段的记录

use*_*412 2 sql sql-server join sql-server-2008

我有2张这样的桌子

+------+-------+------+------+---------+
| NAME |SURNAME|DEPART| POST |EMPLOYEE#|
+------+-------+------+------+---------+
| JACK | LONDON| 111  |WRITER| 12345678|
|......|.......|......|......|.........|
+------+-------+------+------+---------+
Run Code Online (Sandbox Code Playgroud)

+------+-------+------+------+---------+
| NAME |SURNAME|DEPART| POST |  LOGIN  |
+------+-------+------+------+---------+
| MARK | TWAIN | 222  |WRITER| MTWAIN  |
|......|.......|......|......|.........|
+------+-------+------+------+---------+
Run Code Online (Sandbox Code Playgroud)

我需要在表1中找到表2中不存在的记录,并返回此类记录的所有字段.

我使用这样的代码......

SELECT name,depart FROM tb1 EXCEPT SELECT name,depart FROM table2
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,结果只有2个字段NAME,DEPART.

Joh*_*Woo 6

基本上,你可以使用LEFT JOIN这个.当记录打开时Table1未找到任何匹配项时Table2,列on值的结果Table2将为NULL,因此要过滤掉非匹配值,请添加检查table2上的NULL值的条件.

SELECT  a.*
FROM    Table1 a
        LEFT JOIN Table2 b
            ON a.name = b.name AND
                a.depart = b.depart
WHERE   b.Name IS NULL
Run Code Online (Sandbox Code Playgroud)

要进一步了解联接,请访问以下链接:

  • 也许你的意思是 b.Name IS NULL ? (2认同)