0

在我有几个数据库表的假设场景中,一对多的关系。我正在尝试找到一个不错的查询函数,以便我可以返回表 A 中的每一行,其中包含表 B 中所有链接行的嵌套数组。

SELECT a.id AS id,a.name as name,b.id AS b_id,b.name AS b_name FROM a,b WHERE a.id=b.eid;

将只返回一个结果

SELECT 
    a.id AS id,
    a.name as name,
    GROUP_CONCAT(b.id) AS b_id,
    GROUP_CONCAT(b.name) AS b_name 
FROM a,b 
WHERE a.id = b.eid;

而这会返回我想要的,但我要的是数组而不是字符串(b.name 中可能有逗号)

我错过了什么?

4

2 回答 2

1

您可以使用不同于逗号的分隔符:

GROUP_CONCAT(b.name SEPARATOR ';') AS b_name
于 2010-11-01T22:18:57.767 回答
1

不可能返回 MySQL 数据类型以外的任何内容,因此简短的回答是“不”,您不能从子查询返回结果数组(嵌套或其他)。您还会看到尝试从外部构建字符串连接值的一些相当大的性能损失,子字符串顺序将是隐式的,并且正如您所提到的,您将在选择合适的分隔符时遇到问题。

几乎可以肯定,使用简单的 JOIN 创建单个结果集会更有效。应以编程方式处理关系“一”侧的任何重复项(在任何意义上,这比处理多个连接字段上的字符串拆分更可取)。

于 2010-11-01T22:20:13.760 回答