首页 >数据库 >mysql教程 >如何使用 SQL 连接两个以逗号分隔值的表?

如何使用 SQL 连接两个以逗号分隔值的表?

Patricia Arquette
Patricia Arquette原创
2024-12-18 11:17:10979浏览

How to Join Two Tables with Comma-Separated Values Using SQL?

用逗号分隔值连接两个表

问题陈述

数据库规范化可以极大地增强数据管理,但有时结构性限制阻碍了实施。本问题探讨了一种在无法进行标准化时将一个表中的逗号分隔值与第二个表中的值关联起来的方法。

解决方案

在提供的场景中,我们的目标是将 Notes 表的“forDepts”列中的值与 Positions 表中相应的名称组合起来。预期输出是注释 ID ('nid') 列表,其中关联的部门名称以逗号连接并分隔。

要实现此目的,我们可以利用 FIND_IN_SET() 函数和 GROUP_CONCAT() 函数。下面是 SQL 查询:

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

说明

  • FIND_IN_SET() 函数检查值是否存在于以逗号分隔的字符串中。在本例中,我们使用它来确定是否在“forDepts”列中找到 Positions 表中的部门 ID。
  • INNER JOIN 子句确保仅组合两个表中的匹配行。
  • GROUP_CONCAT() 函数连接匹配部门的名称,按 ID 排序,并用逗号。

附加注释

提供的 PHP 代码似乎仅输出“forDepts”列中的第一个值。这可能是由于查询中使用了 LEFT JOIN。要检索所有值,请考虑使用 INNER JOIN。

此方法适用于数据以逗号分隔格式存储并且需要将其与其他值关联而无需重构数据库的情况。

以上是如何使用 SQL 连接两个以逗号分隔值的表?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn