在一列中连接具有逗号分隔值的表
在处理数据库时,通常需要基于包含逗号的列来连接表- 分隔值。在这种特定情况下,您尝试检索表 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中文网其他相关文章!