MYSQL: sql中某一個字段內容為用逗號分割的字符串轉換成多條數據


場景:

表名:testsuer

id     name

1       小紅,小李,李紅,小法

要結果值為:

1     小紅

1     小李

1     李紅

1     小法

MYSQL函數解釋:

substring_index(str,delim,count) 
說明:substring_index(被截取字段,關鍵字,關鍵字出現的次數)

JOIN:這個join最基本原理是笛卡爾積。通過這個方式來實現循環

  • INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關系的記錄。
  • LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
  • RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。

 

 

  mysql內部也有現成的連續數列表可用。如mysql.help_topic: help_topic_id 共有504個數值,一般能滿足於大部分需求了。

  
SELECT
    substring_index( substring_index( a.strcode, ',', b.help_topic_id + 1 ), ',',- 1 )
FROM
    T_buttoninfo a
     JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.strcode ) - length( REPLACE ( a.strcode, ',', '' ) ) + 1)

這種方法的缺點在於,我們需要一個擁有連續數列的獨立表(這里是incre_table)。並且連續數列的最大值一定要大於符合分割的值的個數。

例如有一行的mSize 有100個逗號分割的值,那么我們的incre_table 就需要有至少100個連續行。

當然,mysql內部也有現成的連續數列表可用。如mysql.help_topic: help_topic_id 共有504個數值,一般能滿足於大部分需求了。


免責聲明!

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



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