2

假设数据 -

tbl1 -

ID 日期 价值1
101 2021-01-01 200
101 2021-01-03 400

表2-

ID 日期 价值2
101 2021-01-01 600
101 2021-01-02 900

我的预期结果是 -

ID 日期 价值1 价值2
101 2021-01-01 200 600
101 2021-01-02 900
101 2021-01-03 400
select * from (select * from tbl1 where id in
(another query)) t1
left join tbl2 as t2 on t1.id = t2.id and t1.date = t2.date
union all
select * from (select * from tbl1 where id in
(another query)) t1
right join tbl2 as t2 on t1.id = t2.id and t1.date = t2.date
where t1.id is null and t1.date is null

我无法弄清楚我哪里出错了。

4

2 回答 2

4

我认为您可能使联合查询过于复杂:

SELECT t1.id, t1.date, t1.value1, t2.value2
FROM tbl1 t1
LEFT JOIN tbl2 t2 ON t1.id = t2.id AND t1.date = t2.date
UNION ALL
SELECT t2.id, t2.date, t1.value1, t2.value2
FROM tbl1 t1
RIGHT JOIN tbl2 t2 ON t1.id = t2.id AND t1.date = t2.date
WHERE t1.id IS NULL
ORDER BY id, date;

下面演示链接的屏幕截图

演示

于 2021-04-16T07:48:41.670 回答
0

收集所有存在的(id, `date`)对,然后将源数据加入其中:

SELECT id, `date`, tbl1.value1, tbl2.value2
FROM ( SELECT id, `date` FROM tbl1
       UNION 
       SELECT id, `date` FROM tbl2 ) combined
LEFT JOIN tbl1 USING (id, `date`)
LEFT JOIN tbl2 USING (id, `date`);

小提琴

该解决方案假定它(id, `date`)在每个单独的源表中都是唯一的。如果不是,则必须使用一些聚合(SUM 或 MAX,取决于逻辑)。

于 2021-04-16T08:10:51.213 回答