【问题标题】:MySQL: from one record to many records, is it possible? [duplicate]MySQL:从一条记录到多条记录,有可能吗? [复制]
【发布时间】:2016-08-26 05:51:22
【问题描述】:

我有一张这样的桌子:

code allValues
--------------
C001 1,2,3,4
C002 3,4,5
C003 6,7

我需要得到一个这样的表:

code Value
----------
C001 1
C001 2
C001 3
C001 4
C002 3
C002 4
C002 5
C003 6
C003 7

我用 SQL 语句来做吗? 我在 PHPMyAdmin 中使用 MySQL,不知道具体的数据库引擎。

【问题讨论】:

  • 首先拆分逗号分隔值并存储在表中,然后将该表与主表连接
  • 您可以使用 php 来拆分值或在 mysql 中编写存储过程来执行相同的操作。所以,答案是肯定的,有可能。
  • 是否可以有存储过程的草稿?
  • @Sandip Patel,我只能使用 sql 语句,没有 php。我从标签列表中删除了 php。
  • 我们不做请求。展示你所拥有的,我们会提供帮助。或者,您可以搜索 SO。这个问题已经回答了好几次了。

标签: mysql sql


【解决方案1】:

如果您对每个“allvalue”都有一个查找表,那么您可以这样做:

select t.code, lu.value
from t join
     lookup lu
     on find_in_set(lu.value, t.allvalues) > 0;

另一种方法——如果你知道allvalues 的最大长度——是进行字符串操作:

select t.code,
       substring_index(substring_index(t.allvalues, ',', n.n), ',', -1) as vaue
from t cross join
     (select 1 as n union all select 2 union all select 3 union all select 4
     ) n
     on n.n <= length(t.allvalues) - length(replace(t.allvalues, ',', ''));

此版本假定最大长度为“4”,如问题所示。

【讨论】: