因为我的英语说得不好,所以请您谅解。
有两个表。
主键是时间
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
,我们希望将其设置为非空时间。
答案 0 :(得分:1)
您确实需要在此处进行完全外部联接。 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;
请注意,我们从两个表的每一个中提取了时间的COALESCE
。之所以行之有效,是因为可以确保两个表之一始终存在非NULL
时间(否则,它甚至都不会成为联接查询的一部分)。但是,并非总是保证两个表都始终具有非NULL
时间。