【问题标题】:How to replace union by join in mysql如何在mysql中通过join替换union
【发布时间】:2012-06-10 04:39:29
【问题描述】:
select service_type from service_type as s union select service_type
from cust_service_type as cs

我想用JOINS 替换UNION。请让我知道需要进行的更改。

【问题讨论】:

  • 它们不是等价的。要使用JOIN,表之间必须存在某种关系,例如service_id
  • UNION 有什么不好?
  • 两个表的结构相同,我想要第一个表和第二个表中的所有数据,我想要第一个表中不匹配的数据。

标签: mysql join union


【解决方案1】:

MySQL 不支持FULL JOIN,因此在MySQL 中无法做到这一点。

在其他系统中,您可以使用以下语法:

SELECT  DISTINCT COALESCE(service_type, cust_service_type)
FROM    service_type s
FULL JOIN
        cust_service_type cs
ON      cs.service_type = s.service_type

SELECT  DISTINCT service_type
FROM    service_type s
FULL JOIN
        cust_service_type cs
USING   (service_type)

对于支持JOIN ... USING的系统

请注意,UNION 比此解决方案更有效。

更新:

如果您想要两个表中的所有字段,请使用:

SELECT  *
FROM    service_type s
UNION ALL
SELECT  *
FROM    cust_service_type cs
WHERE   service_type NOT IN
        (
        SELECT  service_type
        FROM    service_type
        )

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2019-12-09
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多