MY SQL ที่แยกระเบียนออกมาอย่างนี้ต้องเขียนอย่างไร

ตาราง A
w                    m
----------------------------
A1,A2,A3           12
D                    99
E                     20
F1,F2              86

-  ผลลัพท์ที่ต้องการ
w        m
----------------
A1    12
A2    12
A3    12    
D    99
E    20
F1    86
F2    86

คือ
1. ลิสแยก w จากตาราง A ที่มีคอมมา , ออกมาสร้างระเบียนใหม่ โดยมีข้อมูล m เหมือนกัน
2. กรณีไม่มี ก็ดึงระเบียนนั้นมาเลย

ขอบคุณ อีกครั้งในความช่วยเหลือ
( รู้สึกเกรงใจเหมือนกัน ที่มาถามบ่อยๆ พอดีไม่ได้เรียนสายนี้มา )
แก้ไขข้อความเมื่อ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1
ถ้าจะเขียนให้รองรับค่าใน w มีกี่ค่าก็ได้ ต้องเขียนเป็น store procedure
แต่ถ้าไม่สนใจเรื่องนั้น สมมติจำกัดให้ใน w มีไม่เกิน 10 ค่า ก็เขียนแบบนี้
SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(W, ',', SEQ), ',', -1) AS W,
    M
FROM
    (
        SELECT
            W,
            M,
            1+LENGTH(W) - LENGTH(REPLACE(W, ',', '')) AS NUM_FIELD
        FROM
            A
    ) T_A,
    (
        SELECT 1 AS SEQ UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
        UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
    ) T
WHERE
    SEQ <= NUM_FIELD

หรือถ้า 10 ค่าน้อยเกินไป แก้ไขให้รองรับ w มีไม่เกิน 100 ค่า ก็แก้เป็นแบบนี้
SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(W, ',', SEQ), ',', -1) AS W,
    M
FROM
    (
        SELECT
            W,
            M,
            1+LENGTH(W) - LENGTH(REPLACE(W, ',', '')) AS NUM_FIELD
        FROM
            A
    ) T_A,
    (
        SELECT DISTINCT
            1+N1+10*N2 AS SEQ
        FROM
            (
                SELECT 0 AS N1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
                UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
            ) T_1,
            (
                SELECT 0 AS N2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
                UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
            ) T_2
    ) T
WHERE
    SEQ <= NUM_FIELD
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่