因为我不会说英语,所以请您理解。
有两个表。
主键是时间
A
A time | A_temperature
1027 | 30
1028 | 30
1030 | 60
B
B time | B_temperature
1027 | 40
1029 | 50
1030 | 20
1031 | 59
我想要以下结果。
time | A_temperature | B_temperature
1027 | 30 | 40
1028 | 30 | NULL
1029 | NULL | 50
1030 | 60 | 20
1031 | NULL | 59
所以我做了以下查询:
SELECT A.time, B.time, A_temperature, B_temperature
FROM A
JOIN B
ON (B.time >= '1027' AND B.time <= '1031')
WHERE (A.time >= '1027' AND A.time <= '1031')
GROUP BY A.time, B.time, A_temperature, B_temperature
执行上述查询后,将A.time
和B.time
分开,输出结果。我想同时结合这些。如果时间是null
,我们想把它放在非空时间。
最佳答案
你真的需要一个完整的外部连接。 MySQL 不直接支持完整的外部连接运算符,但我们可以使用左右连接的并集轻松地模拟一个。
SELECT COALESCE(A.time, B.time) AS time, A_temperature, B_temperature
FROM A
LEFT JOIN B ON A.time = B.time
UNION ALL
SELECT COALESCE(B.time, A.time), A_temperature, B_temperature
FROM A
RIGHT JOIN B ON A.time = B.time
WHERE A.time IS NULL
ORDER BY time;
Demo
请注意,我们从两个表中获取时间的 COALESCE
。这是有效的,因为它保证两个表之一将始终有一个非 NULL
时间存在(否则它甚至不会成为连接查询的一部分)。但是,并不总是保证两个表总是有一个非 NULL
时间。
关于MySQL查询合并重复键(2个表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53111044/