解開MySQL 中GROUP_CONCAT 逆運算的謎團
在資料操作領域,GROUP_CONCAT 函數在將多個值連接成一個值方面佔據統治地位。單字串。然而,將連接的字串拆分為單一值的逆操作提出了挑戰。
手頭上的問題
考慮一個場景,其中您有一個表“顏色” 「資料結構如下:
+----+----------------------+ | id | colors | +----+----------------------+ | 1 | Red,Green,Blue | | 2 | Orangered,Periwinkle | +----+----------------------+
您的目標是將這些資料轉換為更細緻的資料格式:
+----+------------+ | id | colors | +----+------------+ | 1 | Red | | 1 | Green | | 1 | Blue | | 2 | Orangered | | 2 | Periwinkle | +----+------------+
解決方案:深入SQL
要實現這種資料變形,您可以利用SUBSTRING_INDEX函數的強大功能。 「id」列並使用兩個巢狀的SUBSTRING_INDEX 函數來隔離所需的子字串。個逗號之前的子字串,而第二次呼叫則提取第(n.digit 1) 個逗號之後到字串末尾的子字串。套用於最多4 個子字串,如中的「digit」列所定義子查詢。子句按「id」對結果排序,然後按每行的子字串的數字順序對結果進行排序。實際演示,請訪問參考中鏈接的小提琴提供。
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color FROM colors INNER JOIN (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit ORDER BY id, n.digit
[從逗號分隔清單中提取多個值](https://www.data-generator.com/fiddle/d3c78f201137b4b56a63a95332b8106b)
以上是如何反轉 MySQL 的 GROUP_CONCAT:將連接的字串拆分為單獨的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!