3

我有两张这样的桌子

+------+-------+------+------+---------+
| NAME |SURNAME|DEPART| POST |EMPLOYEE#|
+------+-------+------+------+---------+
| JACK | LONDON| 111  |WRITER| 12345678|
|......|.......|......|......|.........|
+------+-------+------+------+---------+

+------+-------+------+------+---------+
| NAME |SURNAME|DEPART| POST |  LOGIN  |
+------+-------+------+------+---------+
| MARK | TWAIN | 222  |WRITER| MTWAIN  |
|......|.......|......|......|.........|
+------+-------+------+------+---------+

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

我使用这样的代码...

SELECT name,depart FROM tb1 EXCEPT SELECT name,depart FROM table2

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

4

3 回答 3

7

基本上,您可以使用LEFT JOIN它。当 on 的记录在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

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-03-22T12:52:51.387 回答
1

假设姓名、姓氏和出发地足以唯一识别人员,请尝试:

select t1.*
from tb1 t1
where not exists
(select 1
 from table2 t2
 where t1.name = t2.name and 
       t1.surname = t2.surname and 
       t1.depart = t2.depart)
于 2013-03-22T12:59:39.497 回答
0
select *
from tb1
minus
select *
from tb2
于 2015-09-07T09:45:23.900 回答