16

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
4

2 回答 2

31

在标准 SQL 中,您可以使用 ANSI SQLEXCEPT运算符,它与UNION

SELECT * FROM Table2
EXCEPT
SELECT * FROM Table1

还有一个INTERSECT 集合运算符可以显示两个源共有的行。

不幸的是,当前版本的 MySQL 都不支持这些,因此您需要使用其他 3 种更详细的方法之一来实现反半连接。

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

于 2012-09-27T18:23:37.373 回答
5

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

statement 1
MINUS
statement 2

或者

statement 1
WHERE NOT EXISTS (statement 2)
于 2012-09-27T18:23:40.040 回答