如何在字段中循环使用逗号分隔的值以在MySQL的其他表中创建新行

时间:2018-11-21 14:41:36

标签: mysql

我在MySQL中使用两个表,一个表中有一些数据,另一个表中将填充此数据,但是-表中有一个字段具有逗号分隔的值,我需要使用它们来创建单独的值(类似)记录。

例如: 数据表:"students" Screenshot of table data is coming from

enter image description here

数据将进入名为"student_season_cross"的表中,并将填充名为"student_id""league_id"的字段,但是我希望它将新记录基于原始表中的“ old_leagues” 。

因此,例如:原始表中的数据如下所示:

student_id  |  old_leagues
38          |  9, 33
39          |  8
40          |  3, 46

将像这样填充新表:

ss_index | student_id | league_id
auto increment | 38 | 9 
auto increment | 38 | 33 
auto increment | 39 | 8 
auto increment | 40 | 3
auto increment | 40 | 46 

我当时以为这是一个循环,但我只是无法将其缠住。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是FIND_IN_SET派上用场的几次。您可以使用此函数来检索(特定)逗号分隔列表的段。使用此功能,我们可以将任何学生记录加入可用联赛的记录中;因此结果如下:

league | student
==============
1      | 38
1      | 39
1      | 40
2      | 39
3      | 22
3      | 23

您可以在这里使用FIND_IN_SET来确定学生参加联赛的情况。我还要假设一个名为leagues的表,其中所有leagues.id下的联赛ID:

INESRT INTO new_leagues (student_id, league_id)
SELECT origial_table.student_id
    leagues.id
FROM leagues
INNER JOIN original_table
    -- join a student record every time FIND_IN_SET matches
    ON FIND_IN_SET(leagues.id, original_table.old_leagues) >= 0

在我正在开发自己的开发服务器时,您必须原谅我目前无法对此进行测试,但是希望您可以从此处收集有效的答案。