gpt4 book ai didi

MySQL SELECT/GROUP BY 丢失 NULL

转载 作者:行者123 更新时间:2023-11-29 01:35:14 24 4
gpt4 key购买 nike

我有以下两个表:

> select * from t1;
+-------+-------+
| text1 | text2 |
+-------+-------+
| a | NULL |
| b | c |
| d | e |
+-------+-------+

> select * from t2;
+-------+-------+-------+
| text1 | text2 | value |
+-------+-------+-------+
| a | NULL | 1 |
| a | NULL | 2 |
| a | NULL | 3 |
| b | c | 1 |
| b | c | 2 |
| d | e | 3 |
| f | g | 1 |
+-------+-------+-------+

我要做的是将两个表连接在一起,获取最小值 value对于每个 text1,text2 t1 中的组合.

这是我目前的查询,我得到的结果是:

> select text1, text2, min(value)
> from t1
> natural join t2
> group by text1, text2
> order by text1 asc;
+-------+-------+------------+
| text1 | text2 | min(value) |
+-------+-------+------------+
| b | c | 1 |
| d | e | 3 |
+-------+-------+------------+

所以它几乎是我所需要的,但如你所见,我丢失了 a值因为 text2NULL .这是我期待的结果:

+-------+-------+------------+
| text1 | text2 | min(value) |
+-------+-------+------------+
| a | NULL | 1 |
| b | c | 1 |
| d | e | 3 |
+-------+-------+------------+

那么我的查询有什么问题过滤掉了那些 NULL值(value)观?

请注意 t2可能有其他组合 text1text2 ,例如('a','z') ,我想要在我的结果中,因此我有两个 text1text2在我的 GROUP BY条款。至少,这就是我想要的(显然有些东西没有像我希望的那样工作)。

请注意,我使用的是 MariaDB 10.3.8 版

最佳答案

尝试加入 <=>空安全运算符。

SELECT t1.text1,
t1.text2,
min(t2.value)
FROM t1
INNER JOIN t2
ON t2.text1 <=> t1.text1
AND t2.text2 <=> t1.text2
GROUP BY t1.text1,
t1.text2
ORDER BY t1.text1 ASC;

你目前拥有的转化为:

SELECT t1.text1,
t1.text2,
min(t2.value)
FROM t1
INNER JOIN t2
ON t2.text1 = t1.text1
AND t2.text2 = t1.text2
GROUP BY t1.text1,
t1.text2
ORDER BY t1.text1 ASC;

作为NULL = NULL不正确,具有空值的行不匹配,因此不会进入结果。

关于MySQL SELECT/GROUP BY 丢失 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51658106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com