使用逗号分隔值连接表:完整指南
数据库表的某些列中通常包含逗号分隔值。这在查询数据时带来了挑战,因为每个值都需要与其相应的行关联。一种常见的情况是连接两个表,其中一列包含引用另一表的逗号分隔值。
考虑以下示例:
注释表
nid | forDepts |
---|---|
1 | 1,2,4 |
2 | 4,5 |
职位表
id | name |
---|---|
1 | Executive |
2 | Corp Admin |
3 | Sales |
4 | Art |
5 | Marketing |
目标是将 Notes 表中的“forDepts”列与 Positions 表中相应的部门名称相关联。所需的输出应该是:
nid | DepartmentName |
---|---|
1 | Executive, Corp Admin, Art |
2 | Art, Marketing |
在不更改数据库结构的情况下,可以使用 SQL 函数的组合来实现。
使用 FIND_IN_SET 和 GROUP_CONCAT
FIND_IN_SET 和 GROUP_CONCAT 函数的组合可用于提取并聚合每个“forDepts”值的部门名称:
SELECT a.nid, GROUP_CONCAT(b.name ORDER BY b.id) DepartmentName FROM Notes a INNER JOIN Positions b ON FIND_IN_SET(b.id, a.forDepts) > 0 GROUP BY a.nid
工作原理
结果
查询的输出将是所需的表'nid' 列与相应的逗号分隔的 'DepartmentName' 连接
结论
通过利用 FIND_IN_SET 和 GROUP_CONCAT 函数,我们可以有效地用逗号分隔值连接两个表,使我们能够跨表提取和聚合数据,即使数据库结构未标准化。事实证明,将数据导出到其他应用程序(例如 Excel)时,此技术特别有用。
以上是如何使用 SQL 连接具有逗号分隔值的表?的详细内容。更多信息请关注PHP中文网其他相关文章!