我有以下查询:
select card.id as id, photo.image as photo
from card
left outer join card_image as photo on (photo.card=card.id)
哪个返回
+----+-------+
| id | photo |
+----+-------+
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 5 |
| 2 | 6 |
+----+-------+
如果我更改photo.image as photo
为group_concat(photo.image) as photos
以下结果
+----+---------------+
| id | photo |
+----+---------------+
| 1 | 2,3,4,5,6 |
+----+---------------+
但是我的期望是
+----+-----------+
| id | photo |
+----+-----------+
| 1 | 2,3,4 |
| 2 | 5,6 |
+----+-----------+
即我想通过id为每张卡获取一组照片
GROUP_CONCAT()
是一个汇总函数,例如MAX()
。每个组产生一行。组是由GROUP BY
子句定义的,并且在没有这样的子句的情况下(如您的情况),所有行都属于同一组。您显然想按以下分组card.id
:
select
card.id as id,
group_concat(photo.image) as photos
from
card
left outer join card_image as photo
on (photo.card = card.id)
group by card.id
还要注意,对于聚合查询,标准SQL允许仅选择分组列和分组功能。在您的原始示例中,没有分组列,因此您完全依靠MySQL扩展进行选择card.id
。另一方面,我在上面给出的代码在这方面是标准的(但group_concat()
仍然是MySQL主义的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句