首页 >数据库 >mysql教程 >如何在 MySQL 数据库中高效地连接具有逗号分隔值的表?

如何在 MySQL 数据库中高效地连接具有逗号分隔值的表?

Linda Hamilton
Linda Hamilton原创
2024-12-27 14:17:16576浏览

How Can I Efficiently Join Tables with Comma-Separated Values in a MySQL Database?

在一列中连接具有逗号分隔值的表

在处理数据库时,通常需要基于包含逗号的列来连接表- 分隔值。在这种特定情况下,您尝试检索表 C 中逗号分隔列(“userids”)与特定搜索词匹配的用户名。

使用子字符串提取的 SQL 查询

您的初始查询尝试使用子查询从表 C 的“userids”列中的逗号分隔字符串中提取第一个值。然而,这种方法效率低下且不可靠,因为它假设所需的值始终是字符串中的第一个。

使用 find_in_set 改进查询

更好的解决方案涉及使用MySQL 的 find_in_set 函数,允许您在逗号分隔的范围内搜索特定值string:

SELECT *
FROM tblC c
JOIN tblB b ON (find_in_set(b.userid, c.userids) > 0)
WHERE c.nname = "new1"

此查询将有效检索与表 C 中“nname”列与“new1”匹配的行关联的所有用户名。

标准化架构替代方案

但是,请务必注意,不建议在列中存储逗号分隔值 实践。为了获得更好的数据完整性和性能,最好通过引入连接表来标准化架构。

在提供的示例中,您可以创建一个新的连接表 (tblC_user),其中包含两列:c_id(表的外键) C) 和 userid(表 B 的外键)。这将允许您表示表 C 和 B 之间的多对多关系,而无需使用逗号分隔的字符串。

标准化查询

使用标准化schema,您可以使用以下查询来检索所需的结果:

SELECT *
FROM tblC c
JOIN tblC_user cu ON (c.id = cu.c_id)
JOIN tblB b ON (b.userid = cu.userid)
WHERE c.nname = "new1"

此查询将提供更多基于逗号分隔值连接表的高效可靠的方法。

以上是如何在 MySQL 数据库中高效地连接具有逗号分隔值的表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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