我想要合并3个表,每个表都有不同的感兴趣的列。我还有一个id变量,我想在“id”内单独合并。我的想法是,我希望按日期(在ID内)合并X,Y和Z,并且如果特定变量不存在该日期,则会丢失值。
Table X:
ID Date X
1 2012-01-01 101
1 2012-01-02 102
1 2012-01-03 103
1 2012-01-04 104
1 2012-01-05 105
2 2012-01-01 150
Table Y:
ID Date Y
1 2012-01-01 301
1 2012-01-02 302
1 2012-01-03 303
1 2012-01-11 311
2 2012-01-01 350
Table Z:
ID Date Z
1 2012-01-01 401
1 2012-01-03 403
1 2012-01-04 404
1 2012-01-11 411
1 2012-01-21 421
2 2012-01-01 450
Desired Result Table:
ID Date X Y Z
1 2012-01-01 101 301 401
1 2012-01-02 102 302 .
1 2012-01-03 103 303 403
1 2012-01-04 104 . 404
1 2012-01-05 105 . .
1 2012-01-11 . 311 411
1 2012-01-21 . . 421
2 2012-01-01 150 350 450
任何想法如何编写此SQL语句?我已经尝试过使用“完全连接”以及交叉产品的语句,但我一直在为某些ID日期组合获取重复值,或者有时没有ID。
任何帮助都将不胜感激。
答案 0 :(得分:2)
加入可能是棘手的事情。我通常的方法是首先形成一组键,然后使用这些键来获得我想要的东西。
SELECT source.ID, source.Date, x.X, y.Y, z.Z
FROM
(
SELECT ID, Date
FROM TableX
UNION
SELECT ID, Date
FROM TableY
UNION
SELECT ID, Date
FROM TableZ
) as source
LEFT JOIN TableX x ON source.ID = x.ID AND source.Date = x.Date
LEFT JOIN TableY y ON source.ID = y.ID AND source.Date = y.Date
LEFT JOIN TableZ z ON source.ID = z.ID AND source.Date = z.Date
ORDER BY source.ID, source.Date