我需要根据应用某个课程代码的课程的学生人数将我的MySQL表行分成多行。根据表中的值将MySQL行拆分为多行
基本上,我需要将设计不良的MySQL表分成行,以便每个学生在与相关course_code和唯一ID生成其指定的行结束(id_new)。请注意,course1_students和course2_students中的学生总数显然将等于所需表中的行数。
感谢任何帮助!
我需要根据应用某个课程代码的课程的学生人数将我的MySQL表行分成多行。根据表中的值将MySQL行拆分为多行
基本上,我需要将设计不良的MySQL表分成行,以便每个学生在与相关course_code和唯一ID生成其指定的行结束(id_new)。请注意,course1_students和course2_students中的学生总数显然将等于所需表中的行数。
感谢任何帮助!
要将每行分成两行,通过将设计不佳的表与两行常量表交叉连接,获取FROM中每行的两个副本。要为FROM表中的每一行获取courseX_student行,请在course_students上与table of integers >= 0交叉连接。使用auto_incremented id_new将以下行插入到表中。 (我假设0 courseX_students值产生任何输出行。因为你没有给表的确切含义。)
select id,name,1 as course_students,
case which
when 1 then course1_code
when 2 then course2_code
end as course_code
from numbers
cross join (select 1 as which union select 2) w
cross join poorly
where n <
case which
when 1 then course1_students
when 2 then course2_students
end
CREATE TABLE my_new_table AS
SELECT id
, name
, course1_students course_students
, course1_code course_code
FROM my_table
UNION
SELECT id
, name
, course2_students
, course2_code
FROM my_table;
ALTER TABLE my_new_table ADD PRIMARY KEY(id,course_code);
id_new是多余的(和名称可能属于一个单独的表)
可能可以与几个工会做到这一点。这可能比这个更好。 – Danny
谢谢。我试过UNION,最后得到了12行代码。我稍后会发布结果,但是我希望能有更快更清洁的方法。 – user1450458
让我们看看联盟 – Strawberry