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
答案 0 :(得分:22)
在标准SQL中,您可以使用ANSI EXCEPT
运算符,该运算符与UNION
完全类似
SELECT * FROM Table2
EXCEPT
SELECT * FROM Table1
还有一个INTERSECT
set operator会显示两个来源共有的行。
不幸的是,当前版本的MySQL都不支持这些,所以你需要使用其中3种更冗长的方式来实现反半连接。
答案 1 :(得分:4)
如果您使用的是Oracle,则会使用MINUS子句。
statement 1
MINUS
statement 2
或
statement 1
WHERE NOT EXISTS (statement 2)