用分号查询列到单独的行中[重复]

Posted

技术标签:

【中文标题】用分号查询列到单独的行中[重复]【英文标题】:Query column with semicolon into separate rows [duplicate] 【发布时间】:2021-06-20 23:19:13 【问题描述】:

基本上,我有一个名为 Table1 的表,其中有一列名为 emails 的列包含用分号分隔的电子邮件地址。

例如:

第 1 行:

test1@gmail.com; test2@gmail.com

第 2 行:

test4@gmail.com; test5@gmail.com; test6@gmail.com

我想在表格上进行选择查询,以便在每次有分号拆分时在其自己的行上显示每封电子邮件。如何做到这一点?

【问题讨论】:

不要在单行的列中放置多个值。这不是 SQL 可以轻松工作的方式。使用单独的表和 JOIN。所以它目前不可能以目前的形式出现。 首先规范化你的架构。见"Is storing a delimited list in a database column really that bad?"(剧透:是的。)。 我明白了,有没有办法在查询中使用临时表来拆分数据? 寻找分割字符串函数 您可以在 Stack Overflow 上找到许多带有搜索词的帖子:“将字符串拆分为行”或类似内容。在我发现一篇这样的帖子具有多种不同的解决方案后,我投票将这个问题标记为重复问题。它们都不是很方便或优雅。正如其他人所评论的那样,最好使用每个值一行来存储您的数据。 【参考方案1】:

最好创建一个数组或对象数组并保存数据,例如..

[test1@gmail.com, test2@gmail.com, ...]
[email: test1@gmail.com, email: test2@gmail.com]

通过这种方式,您可以使用查询或您正在使用的任何编程语言轻松获取数据。

【讨论】:

我目前无法修改表的架构,是否有其他解决方法来处理以分号分隔的列表?任何建议表示赞赏 您是否使用任何后端语言?还是只是 mysql 查询? 是的,我也在使用 php PDO hmm,然后在简单的选择查询后尝试explode()方法,结果相同,$str = "test@gamil.com; test1@gmail.com; test2@gmail.com";然后 print_r (explode(";",$str));希望这会有所帮助 这里,($str) 是你从表中得到的

以上是关于用分号查询列到单独的行中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用分号正则表达式分隔的多封电子邮件[重复]

在MySQL命令行中使用SQL语句的规则

我可以使用 MySQL Connector/J 执行多个用分号分隔的查询吗? [复制]

电源查询。合并具有折叠值的行中的重复行

如何去掉SQL结果集中的 零

mysql命令行中,以啥符号结束命令