MySQL 子查询和逗号分隔列表:实用指南
使用多个 MySQL 表通常涉及子查询。 然而,从子查询结果生成逗号分隔的列表可能很棘手。本指南演示了使用 GROUP_CONCAT
.
挑战:
考虑以下场景:您需要一个查询来检索发布 ID、名称以及以逗号分隔的关联站点名称列表。 使用子查询的简单方法可能如下所示:
<code class="language-sql">SELECT p.id, p.name, (SELECT name FROM sites s WHERE s.id = p.site_id) AS site_list FROM publications p;</code>
这不会产生逗号分隔的字符串;相反,它每行返回一个站点名称。
GROUP_CONCAT
的解决方案:
MySQL 的 GROUP_CONCAT
函数是创建逗号分隔列表的关键。 这是改进的查询:
<code class="language-sql">SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list FROM sites s INNER JOIN publications p ON s.id = p.site_id GROUP BY p.id, p.name;</code>
工作原理:
INNER JOIN
: 这可以根据匹配的 publications
有效链接 sites
和 site_id
表。 仅包含相应网站的出版物。GROUP_CONCAT(s.name)
: 此函数将每个出版物 ID 的所有 s.name
值(站点名称)连接成单个逗号分隔的字符串,存储在 site_list
列中。GROUP BY p.id, p.name
: 这将按出版物 ID 和名称对结果进行分组,确保 GROUP_CONCAT
对每个出版物正确运行。此修改后的查询提供了所需的输出:出版物 ID、名称以及格式整齐的逗号分隔的关联站点名称列表。
以上是如何从 MySQL 子查询中高效提取逗号分隔列表?的详细内容。更多信息请关注PHP中文网其他相关文章!