我需要根據應用某個課程代碼的課程的學生人數將我的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