【发布时间】:2025-06-02 14:35:02
【问题描述】:
假设我们有两个简单的表cars 和owners。每辆车可以有多个车主。我们可以在两个查询中使用外键获取所有汽车及其所有者,但是在一个查询中如何呢?与 MySQL 的每个连接都相当昂贵,所以我使用 data group 和 json 来解决问题。
select
cars.id,
CARS.name,
GROUP_CONCAT(CONCAT('{"id":"',owners.id,'", "name":"', owners.name, '"}')) owners
from cars
join owners
ON cars.id = owners.car_id
group by owners.car_id
演示:http://www.sqlfiddle.com/#!2/a62711/3
效果很好,但这种方法有什么缺点吗?我想到的一件事是对结果字段长度的一些限制。有吗?如果owners.name 包含非法字符,如引号或撇号,我是否应该准备我的查询以中断?我应该考虑什么?
【问题讨论】:
-
是的,先读docs