【问题标题】:SQL - Is there an opposite but equivalent UNION function?SQL - 是否有相反但等效的 UNION 函数?
【发布时间】:2012-09-19 14:45:12
【问题描述】:

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

    SELECT * FROM Table2
    EXCEPT
    SELECT * FROM Table1
    

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

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

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

    【讨论】:

      【解决方案2】:

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

      statement 1
      MINUS
      statement 2
      

      statement 1
      WHERE NOT EXISTS (statement 2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 2019-12-20
        • 1970-01-01
        • 2010-10-22
        • 2021-10-10
        相关资源
        最近更新 更多