在假设的场景中,我有一对数据库表,处于一对多的关系中。我试图找到一个很好的查询函数,以便我可以返回表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中可能有逗号)
我错过了什么?
答案 0 :(得分:1)
您可以使用与逗号不同的分隔符:
GROUP_CONCAT(b.name SEPARATOR ';') AS b_name
答案 1 :(得分:1)
除了MySQL数据类型之外,不可能返回任何其他内容,因此简短的答案是,您无法返回子查询的结果数组(嵌套或其他)。您还会看到一些非常激烈的性能命中,试图从外部构建字符串连接值,子字符串顺序将是隐含的,正如您所提到的,您将在选择合适的分隔符时遇到问题。
使用简单的JOIN创建单个结果集几乎肯定会更有效率。关系的“一”侧的任何重复都应该以编程方式处理(在任何意义上,最好是处理多个连接字段上的字符串拆分)。