mysql是否有相反但等效的UNION函数?
我知道可以用更长的查询来做到这一点,但我很好奇是否有一个等效的函数.
我有2个不同表的2个select语句
select state, state_name, id, idname, phone, mobile, home from table1
select state, state_name, id, idname, phone, mobile, home from table2
Run Code Online (Sandbox Code Playgroud)
我需要一个仅从table1中获取的查询,并且只有当table1中的idname,phone,mobile,home与table2不匹配时才会查询
例如:Table1有
AK | Alaska | 1 | row6 | 453 | 567 | 123
Run Code Online (Sandbox Code Playgroud)
但表2有:
AK | Alaska | 1 | row6 | 453 | 567 | 123
AK | Alaska | 1 | row6 | NULL | 567 | 123
AK | Alaska | 1 | tttttt | 453 | 567 | 123
Run Code Online (Sandbox Code Playgroud)
查询将显示
AK | Alaska | 1 | row6 | NULL | 567 | 123
AK | Alaska | 1 | tttttt | 453 | 567 | 123
Run Code Online (Sandbox Code Playgroud)
不会显示
AK | Alaska | 1 | row6 | 453 | 567 | 123
Run Code Online (Sandbox Code Playgroud)
Mar*_*ith 27
在标准SQL中,您可以使用ANSI SQL EXCEPT
运算符,它类似于UNION
SELECT * FROM Table2
EXCEPT
SELECT * FROM Table1
Run Code Online (Sandbox Code Playgroud)
还有一个INTERSECT
集合运算符,可以显示两个源共有的行.
不幸的是,当前版本的MySQL都不支持这些,所以你需要使用其他3种更冗长的方式来实现反半连接.
NOT IN与NOT EXISTS vs. LEFT JOIN/IS NULL
如果您使用的是Oracle,则将使用MINUS子句。
statement 1
MINUS
statement 2
Run Code Online (Sandbox Code Playgroud)
要么
statement 1
WHERE NOT EXISTS (statement 2)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31696 次 |
最近记录: |