2012-09-27 102 views
8

是否有一个相反的但等效的UNION函数的MySQL?SQL - 是否有一个相反但等效的UNION函数?

我知道可以用更长的查询来做到这一点,但我很好奇是否有一个等价的函数。

我有2页不同的表

select state, state_name, id, idname, phone, mobile, home from table1 
select state, state_name, id, idname, phone, mobile, home from table2 

2个SELECT语句和我需要的只是拉从表1和查询只如果idname,电话,手机,从表1家不符合表2

匹配

例如:表1具有

AK | Alaska | 1 | row6 | 453 | 567 | 123 

但表2具有:

AK | Alaska | 1 | row6 | 453 | 567 | 123 
AK | Alaska | 1 | row6 | NULL | 567 | 123 
AK | Alaska | 1 | tttttt | 453 | 567 | 123 

查询将显示

AK | Alaska | 1 | row6 | NULL | 567 | 123 
AK | Alaska | 1 | tttttt | 453 | 567 | 123 

不会显示

AK | Alaska | 1 | row6 | 453 | 567 | 123 
+1

哪个数据库? – beny23

回答

19

在标准SQL中,你可以使用ANSI SQL EXCEPT运营商这是UNION

SELECT * FROM Table2 
EXCEPT 
SELECT * FROM Table1 

一个确切的模拟还有一个INTERSECTset operator会显示两个来源有共同点的行。

不幸的是,这些在当前版本的MySQL中都不被支持,因此您需要使用其他3种更加冗长的方式来实现反半连接。

NOT IN vs. NOT EXISTS vs. LEFT JOIN/IS NULL

4

如果您正在使用Oracle,您将使用MINUS条款。

statement 1 
MINUS 
statement 2 

statement 1 
WHERE NOT EXISTS (statement 2) 
相关问题