【发布时间】:2011-12-21 23:11:49
【问题描述】:
我需要合并两个表:
- 两者都有一个主键列日期,但具有不同的值(不同的时间间隔)。
- 两者都有不同的(未知)列:我不知道列的名称(两个表中可能出现相同的列名),我不知道有多少列,但都是相同的类型。
一个例子:
table1
date | colA | colB | colC
2011-02-02 | 1.09 | 1.03 | 1.04
table2
date | col1 | col2 | col3 | col4
2011-02-03 | 1.03 | 1.02 | 1.07 | 1.03
查询结果应如下所示:
tableResult
date | colA | colB | colC | col1 | col2 | col3 | col4
2011-02-02 | 1.09 | 1.03 | 1.04 | null | null | null | null
2011-02-03 | null | null | null | 1.03 | 1.02 | 1.07 | 1.03
这不起作用:
-
INNER JOIN因为它只会返回table1和table2之间的交集, -
OUTER JOIN仅从左表返回交集 + 值(如果使用右连接,则返回右表) -
UNION因为列数可能不同。
有什么想法吗?
克里斯托夫
【问题讨论】:
-
我有一个解决方案,但包含多余的主键。你可以吗?
-
如果字段“colA”在同一日期有不同的值怎么办?其中一张表应该是主表。
-
列名是简单传感器网络中传感器的地址。因此,两个表中的相同列名表示相同的传感器。两个条目中的相似值将只是相同的值。
DISTINCT可以帮助解决这个问题,如果我没记错的话。另一方面,两个表的日期间隔不同,它们永远不应该发生冲突(偶数值与奇数值) -
@Christoph,您找到任何更好的解决方案请建议我...我有同样的情况...
-
@samirprogrammer:不,我自己没有找到更好的解决方案,请参见下面给出的答案。