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

Ton*_*a S 14 mysql sql

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


dis*_*ake 5

如果您使用的是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)