【问题标题】:Full Outer Join on Three Tables三张表的全外连接
【发布时间】:2012-02-10 10:16:39
【问题描述】:

如何对三个表执行完全外连接?

我已经成功地在两个表上进行了联接,但是我不知道如何将第三个表添加到我的查询中。

这是我的(冗长的)查询:

SELECT MONTH(t1.datetime) AS month, COUNT(DISTINCT t1.column) AS t1Count, COUNT(DISTINCT t2.column) AS t2Count
FROM t1
LEFT OUTER JOIN t2 ON MONTH(t2.datetime) = MONTH(t1.datetime)
GROUP BY MONTH(t1.datetime)
UNION
SELECT MONTH(t1.datetime) AS month, COUNT(DISTINCT t1.column) AS t1Count, COUNT(DISTINCT t2.column) AS t2Count
FROM t1 
RIGHT OUTER JOIN t2 ON MONTH(t2.datetime) = MONTH(t1.datetime)
GROUP BY MONTH(t2.datetime)

非常感谢任何指导。

【问题讨论】:

    标签: mysql full-outer-join


    【解决方案1】:

    试试这个查询 -

    (已编辑)

    SELECT
      t.month,
      COUNT(DISTINCT t1.column) t1count,
      COUNT(DISTINCT t2.column) t2count,
      COUNT(DISTINCT t3.column) t3count
    FROM 
      (SELECT MONTH(datetime) AS month FROM t1
        UNION
      SELECT MONTH(datetime) AS month FROM t2
        UNION
      SELECT MONTH(datetime) AS month FROM t3
      ) t
      LEFT JOIN t1
        ON t.month = MONTH(t1.datetime)
      LEFT JOIN t2
        ON t.month = MONTH(t2.datetime)
      LEFT JOIN t3
        ON t.month = MONTH(t3.datetime)
      GROUP BY
        month
    

    【讨论】:

    • 感谢您的建议。不幸的是,这会返回一个月的记录(但是三个表的计数值正确),而我正在寻求显示所有月份的值。
    • 我没有添加“按月分组”。我已经改变了答案,现在试试;-)
    • 我很抱歉 - 我应该注意到我错过了自己!这完全符合要求,非常感谢您的帮助和洞察力。谢谢德瓦特。
    猜你喜欢
    • 1970-01-01
    • 2014-10-26
    • 2023-04-05
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多