mysql:一列轉多行,多行轉一列


系統中有這樣一個表table_ids,parrent_ids保存的是一串用逗號隔開的id

需求:以orleid為依據,拼接id、parent_ids,同時要求去除重復的id。

思路:先拼接id、parent_ids為一個字符串(暫且叫idstr),去除最后一個逗號,然后以roleid為依據,把idstr按逗號分割成多行,去重,再把多行拼接為一列。

  其中tmp_numindex表為只有一個字段id,類型為int,保存從1到10000的連續數字。

SELECT roleid,GROUP_CONCAT(str) FROM (
SELECT DISTINCT
    roleid,
    REPLACE(
        SUBSTRING_INDEX(str, ',', a.id),
        CONCAT(
            SUBSTRING_INDEX(str, ',', a.id - 1),
            ','
        ),
        ''
    )AS str
FROM
    tmp_numindex a
CROSS JOIN(
    SELECT
        roleid,
        CONCAT(str, ',')AS str,
        LENGTH(str)- LENGTH(REPLACE(str, ',', ''))+ 1 AS size
    FROMtable_ids
)b ON a.id <= b.size ) a GROUP BY roleid

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM