我有2张这样的表
+------+-------+------+------+---------+
| 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。
答案 0 :(得分:5)
基本上,您可以对此使用LEFT JOIN
。当Table1
上的记录在Table2
上找不到任何匹配项时,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
要进一步了解联接,请访问以下链接:
答案 1 :(得分: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)
答案 2 :(得分:0)
select *
from tb1
minus
select *
from tb2