【发布时间】:2017-11-08 20:44:47
【问题描述】:
我目前有一个名为“RESOURCES”的表,其中包含一个名为“RES_Tags”的关键字字段。 “RES_Tags”字段包含一个逗号分隔的每条记录的关键字列表。
我需要规范化这个表/字段。
我已经设置了以下表格:TAGS、TAGS_TO_RESOURCES。
请在此处查看架构:http://sqlfiddle.com/#!9/edac4/1
什么查询可以让我解析 RES_Tags 中的关键字,将它们写入 TAGS 表而不创建重复项,然后在 TAGS_TO_RESOURCES 表中写入一个列表?
【问题讨论】:
-
老实说,我会用 Python 编写一个小脚本来执行此操作。从
tags.res_tags获取每一行,将字符串拆分为一个数组,然后运行一个循环将多行插入到新表中,每个标签一行。 -
我真的想过在 VBS 中这样做(我最喜欢的风格)。我可以使用 FOR EACH x IN RES_Tags、NEXT、LOOP,但我认为从数据库端开始可能会更好。仍然在栅栏上......
-
在这种情况下,在 SQL 中执行任务非常尴尬,因此在应用程序代码中执行任务要好得多。 SQL 从一开始就意味着在应用程序代码的上下文中使用。
-
另外,SQL 版本往往更难维护。我的示例代码需要修改(或更复杂)以处理列中塞满六个以上项目的情况。
-
谷歌“(撤消或反向或反向)group_concat”。这是一个常见问题。
标签: mysql parsing database-normalization delimited