我正在try 总结来自两个数据源的一些数据.表格如下
表t1
auto_id | unique_column | value |
---|---|---|
1 | d1 | 10 |
2 | d2 | 5 |
3 | d3 | 15 |
表t2
auto_id | unique_column | value |
---|---|---|
null | d3 | 5 |
null | d4 | 6 |
查询后t1中的预期数据:
auto_id | unique_column | value |
---|---|---|
1 | d1 | 10 |
2 | d2 | 5 |
3 | d3 | 20 |
4 | d4 | 6 |
为了解决这个问题,我计划执行以下查询
REPLACE INTO t1
SELECT auto_id, unique_column, SUM(value) value FROM
(
SELECT * FROM t1
UNION ALL
SELECT * FROM t2
) GROUP BY unique_column;
此查询的问题
SELECT auto_id, unique_column, SUM(value) value FROM
(
SELECT * FROM t1
UNION ALL
SELECT * FROM t2
) GROUP BY unique_column;
上面的查询将给我们
auto_id | unique_column | value |
---|---|---|
1 | d1 | 10 |
2 | d2 | 5 |
3 | d3 | 20 |
NULL | d4 | 6 |
这没关系.在插入查询中,我们将得到以下结果:
auto_id | unique_column | value |
---|---|---|
1 | d1 | 10 |
2 | d2 | 5 |
3 | d3 | 20 |
4 | d4 | 6 |
但下面的查询
SELECT auto_id, unique_column, SUM(value) value FROM
(
SELECT * FROM t2
UNION ALL
SELECT * FROM t1
) GROUP BY unique_column;
会给我们
auto_id | unique_column | value |
---|---|---|
1 | d1 | 10 |
2 | d2 | 5 |
NULL | d3 | 20 |
NULL | d4 | 6 |
因此,插入查询将产生以下意外结果
auto_id | unique_column | value |
---|---|---|
1 | d1 | 10 |
2 | d2 | 5 |
3 | d3 | 15 |
4 | d3 | 20 |
5 | d4 | 6 |
另一种 idea 是,full outer join
,但mysql决定不实现这个.mysql还可以做什么其他替代方案?