MySQL查询合并重复键(2个表)

标签 mysql

因为我不会说英语,所以请您理解。

有两个表。
主键是时间

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.timeB.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;

enter image description here

Demo

请注意,我们从两个表中获取时间的 COALESCE。这是有效的,因为它保证两个表之一将始终有一个非 NULL 时间存在(否则它甚至不会成为连接查询的一部分)。但是,并不总是保证两个表总是有一个非 NULL 时间。

关于MySQL查询合并重复键(2个表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53111044/

相关文章:

mysql - 为什么mysql过程中的if语句无法得到正确的逻辑查询?

php - SQL查询空字段,选择ALL选项如*

php - 修复 WordPress 自定义菜单字符编码

php - jQuery 无法检索数据库更新

MySql Inner 加入一个非重复的值范围

javascript - 当我尝试添加确认框时,不断出现 php 白屏死机

mysql - 为什么mysql返回所有行

PHP 代码无法在页面中运行,但在 phpdmin 中运行

php - 大于语句中包含不需要的字符

mysql - 具有基于2列和部分唯一 bool 值的自动递增的架构