首页 >数据库 >mysql教程 >如何在 MySQL 中使用分隔值连接多个表中的数据而不链接表?

如何在 MySQL 中使用分隔值连接多个表中的数据而不链接表?

Patricia Arquette
Patricia Arquette原创
2024-11-01 09:31:301003浏览

How to Join Data from Multiple Tables with Delimited Values in MySQL Without Linking Tables?

在 MySQL 中使用分隔值连接多个表中的数据

问题:

如何我可以高效地从其中一列中具有分号分隔值的多个表中检索数据,而无需使用外部语言或引入链接表?

答案:

至为了解决这个问题,我们可以利用一种技术,将分号分隔的值转换为单独的行。这使我们能够连接表并获得所需的结果。

解决方案:

提供的解决方案采用两个自定义 MySQL 函数:

  • COUNT_IN_SET(haystack, delim):返回给定字符串中字符分隔项的计数。
  • VALUE_IN_SET(haystack, delim,which):处理将分隔列表作为数组并检索指定索引处的值(其中)。

这些函数与用户表和资源表之间的联接结合在一起,使用整数系列表来迭代分号-分隔值:

<code class="sql">SELECT user_resource.user, 
       resource.data

FROM user_resource 
     JOIN integerseries AS isequence 
       ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') /* normalize */

     JOIN resource 
       ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id)      
ORDER BY
       user_resource.user,  resource.data</code>

此查询结果会生成一个表,其中每个用户的资源都表示为单独的行,使我们能够轻松连接资源表以获取相应的数据。

其他信息:

  • integerseries 表包含用于标准化分隔列表的一系列值。
  • COUNT_IN_SET 和 VALUE_IN_SET 函数可以在其他场景中重用,其中需要处理分隔列表。
  • 对于 SQLite 数据库,可以使用类似的解决方案:https://stackoverflow.com/a/24750820/302036

以上是如何在 MySQL 中使用分隔值连接多个表中的数据而不链接表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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