我有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语句?我尝试弄乱“完全连接”和叉积的where语句,但是我一直在获取某些ID-日期组合(有时甚至没有ID)的重复值。
任何帮助,将不胜感激。
加入可能是棘手的事情。我通常的方法是先形成一组键,然后使用这些键得到我想要的。
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