MySQL使用2个公共属性连接3个表

MySQL使用2个公共属性连接3个表,mysql,join,left-join,Mysql,Join,Left Join,我有3个表,结构如下: 表A: Date,ID,A1,A2 表B: Date,ID,B1 表C: Date,ID,C1,C2,C3 我想将这三个属性加入一个表:Date,ID,A1,A2,B1,C1,C2,C3 对于这3个表,一些日期和ID是相同的,但有些是不同的,因此我想做一些类似于使用联合左连接,然后再进行右连接,这样我就不会丢失任何日期和ID行。似乎我需要日期和ID组合来获得它们自己的唯一标识符,这样我就可以加入表中,但我遇到了一个障碍 你可以试试这个: SELECT Date

我有3个表,结构如下:

表A:

  • Date
    ID
    A1
    A2
表B:

  • Date
    ID
    B1
表C:

  • Date
    ID
    C1
    C2
    C3
我想将这三个属性加入一个表:
Date
ID
A1
A2
B1
C1
C2
C3


对于这3个表,一些日期和ID是相同的,但有些是不同的,因此我想做一些类似于使用
联合
左连接
,然后再进行
右连接
,这样我就不会丢失任何日期和ID行。似乎我需要日期和ID组合来获得它们自己的唯一标识符,这样我就可以加入表中,但我遇到了一个障碍

你可以试试这个:

SELECT Date, ID, A1, A2, B1, C1, C2, C3
FROM (
    SELECT Date, ID
    FROM Table_A
    UNION
    SELECT Date, ID
    FROM Table_B
    UNION
    SELECT Date, ID
    FROM Table_B
) d
LEFT JOIN Table_A a on (d.Date=a.Date and d.ID=a.ID)
LEFT JOIN Table_B b on (d.Date=b.Date and d.ID=b.ID)
LEFT JOIN Table_C c on (d.Date=c.Date and d.ID=c.ID)

这应该是您想要的答案,但是我认为对于大型数据集,该语句的速度会非常慢。

听起来您想要一个完整的外部联接,不幸的是mysql不支持它。你使用联合的想法可能是最好的方法。检查我们的示例:这是我在尝试上述建议时不断遇到的错误:错误代码:1064您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解使用近d LEFT JOIN的正确语法…修复了错误,感谢您指出它(我从子选择表中删除了
日期
别名),不幸的是,我的数据集非常大,仅表A就有超过300000行。在停止查询之前,我运行了一个半小时。您对可能更快的查询有什么建议吗?非常感谢你。