如何在mysql中通过字段中逗号分隔的值在其他表中创建新行

7cjasjjr  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(338)

我在mysql中有两个表,一个有一些数据,另一个将用这些数据填充,但是-表中有一个字段有逗号分隔的值,我需要使用这些值来创建单独的(类似的)记录。
例如:数据表: "students" 表格数据的截图来自

数据将进入一个名为 "student_season_cross" 并将填充名为 "student_id" 以及 "league_id" ,但我希望它将新记录基于原始表中的“旧联盟”。
例如,原始表中的数据如下所示:

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

我本以为这是某种循环,但我就是绕不过去。有什么想法吗?

nfeuvbwi

nfeuvbwi1#

这是为数不多的 FIND_IN_SET 很方便。可以使用此函数检索逗号分隔列表的(特定)段。使用这个,我们可以将任何学生记录加入到可用联盟的记录中;结果是:

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

这是你可以使用的地方 FIND_IN_SET 决定学生参加一个联盟。我还假设一个名为 leagues 你所有的联盟身份证都在哪里 leagues.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

您必须原谅我目前无法测试这一点,因为我正在升级我的开发服务器,但希望您可以从这里收集到一个有效的答案。

相关问题