MySQL使用2个公共属性连接3个表
我有3个表,结构如下: 表A: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
,Date
,ID
,A1
李>A2
,Date
,ID
B1
,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行。在停止查询之前,我运行了一个半小时。您对可能更快的查询有什么建议吗?非常感谢你。