我有以下 MySQL 表(图像
):
+----+------------+-----------------------+
| id | gallery_id | path |
+----+------------+-----------------------+
| 58 | NULL | 58.jpg
| 59 | NULL | 59.jpg
| 66 | 9 | 9-001.jpg
| 67 | 9 | 9-002.jpg
| 68 | 10 | 10-001.jpg
| 69 | 10 | 10-002.jpg
...
我想选择 gallery_id 为空的行,或者如果不为空,则按 gallery_id 对其进行分组。 所以预期的结果是:
+----+------------+-----------------------+
| id | gallery_id | path |
+----+------------+-----------------------+
| 58 | NULL | 58.jpg
| 59 | NULL | 59.jpg
| 66 | 9 | 9-001.jpg
| 68 | 10 | 10-001.jpg
...
我尝试使用coalesce
函数来实现这个结果:
select * from `images` group by coalesce(gallery_id, id);
但它仅返回 gallery_id
为 null 的行。
请告诉我我做错了什么?提前致谢。
最佳答案
你的要求没有意义。 GROUP BY
与 SELECT *
是没有意义的,因为不清楚大多数列值来自哪里。
您似乎想要确定优先级。 。 。每个 NULL
一行,然后每个画廊一行。
我建议:
select i.*
from images i
where i.gallery_id is null or
i.id in (select min(i2.id) from images i2 group by i2.gallery_id);
额外的好处是,这是标准 SQL,应该适用于任何数据库。
关于mysql - SQL 分组合并未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058730/