好的,所以我有两个表(实际上是视图),它们都具有相同的结构。每个都有一个带有日期的列和一个带有数值的列。
两个表中的日期几乎是连续的,涵盖同一时期。因此,数据大致相同,但一个表中的日期可能不会出现在另一个表中。
我想要一个表,一个日期列和两个数字列。如果一个表中没有日期,则相应的数字字段应为空。
有什么方法吗?
PS这不是同一个问题:How can I merge two MySQL tables?
答案 0 :(得分:2)
VladiatOr 的解决方案可以通过让第一部分选择记录同时存在于第一个表中,然后仅添加到第一个表中,然后添加仅存在于第二个表中的记录来缩短。
SELECT t1.td, t1.val as val1, t2.val as val2
FROM table1 as t1
LEFT JOIN table2 as t2
ON t1.td = t2.td
UNION
SELECT t2.td, t1.val as val1, t2.val as val2
FROM table2 as t2
LEFT JOIN table1 as t1
ON t2.td = t1.td
WHERE t1.td IS NULL
另请参阅MySQL Reference on JOIN Syntax中来自 Tobias Riemenschneider 的评论。
答案 1 :(得分:1)
此查询是3个查询的并集: 第一个连接两个表中常见的记录。 第二个添加仅存在于table1中的那些。 第三个添加仅在table2中的记录。
SELECT t1.td, t1.val as val1, t2.val as val2
FROM table1 as t1, table2 as t2
WHERE t1.dt = t2.dt
UNION
SELECT t1.td, t1.val as val1, null as val2
FROM table1 as t1
LEFT JOIN table2 as t2
ON t1.td = t2.td
WHERE t2.td IS NULL
UNION
SELECT t2.td, null as val1, t2.val as val2
FROM table2 as t2
LEFT JOIN table1 as t1
ON t2.td = t1.td
WHERE t1.td IS NULL