【发布时间】:2018-08-02 16:13:21
【问题描述】:
我有以下两张表:
> 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 |
+-------+-------+-------+
我想要做的是将两张表连接在一起,为t1 中的每个text1,text2 组合获取最小的value。
这是我目前的查询,我得到的结果是:
> 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 值,因为 text2 是 NULL。这是我期待的结果:
+-------+-------+------------+
| text1 | text2 | min(value) |
+-------+-------+------------+
| a | NULL | 1 |
| b | c | 1 |
| d | e | 3 |
+-------+-------+------------+
那么过滤掉那些NULL 值的查询有什么问题?
注意t2 可能有text1 和text2 的其他组合,例如('a','z'),我不想要在我的结果中,因此我的GROUP BY 子句中同时包含text1 和text2。至少,这就是我想要的(显然有些东西没有按我的意愿工作)。
注意,我使用的是 MariaDB 版本 10.3.8
【问题讨论】: