SQL - 是否存在相反但等效的UNION函数?

时间:2012-09-27 18:20:54

标签: mysql sql

mysql是否有相反但等效的UNION函数?

我知道可以通过更长的查询来做到这一点,但我很好奇是否有相同的功能。

我有2个不同表格的2个选择语句

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

我需要一个仅从table1中获取的查询,并且只有当table1中的idname,phone,mobile,home与table2不匹配时

例如:Table1有

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

2 个答案:

答案 0 :(得分:22)

在标准SQL中,您可以使用ANSI EXCEPT运算符,该运算符与UNION完全类似

SELECT * FROM Table2
EXCEPT
SELECT * FROM Table1

还有一个INTERSECT set operator会显示两个来源共有的行。

不幸的是,当前版本的MySQL都不支持这些,所以你需要使用其中3种更冗长的方式来实现反半连接。

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

答案 1 :(得分:4)

如果您使用的是Oracle,则会使用MINUS子句。

statement 1
MINUS
statement 2

statement 1
WHERE NOT EXISTS (statement 2)