在MySQL 中將逗號分隔的列表拆分為多行
問題:
一張表包含一個帶有逗號分隔值的列,這些值用作另一個表的外鍵。如何透過連接或查詢來處理這些數據,以在新表中建立多個條目,從而有效地「非規範化」數據?
解決方案:
MySQL 提供了一個使用 FIND_IN_SET() 分割這些逗號分隔清單的解決方案函數。
SELECT material_id FROM materials WHERE FIND_IN_SET(name, part.material) > 0;
此查詢會擷取材料表中每個名稱的material_id,該名稱出現在零件表材料列中以逗號分隔的清單中。結果是根據需要包含part_id和material_id對的展平表。
範例:
考慮以下資料:
+---------+-------------+ | part_id | material | +---------+-------------+ | 339 | 1.2mm;1.6mm | | 970 | 1.6mm | +---------+-------------+
下列查詢會將資料列分割為單獨的行:
SELECT part_id, material_id FROM materials WHERE FIND_IN_SET(name, part.material) > 0;
結果將是:
+---------+-------------+ | part_id | material_id | +---------+-------------+ | 339 | 1 | | 339 | 2 | | 970 | 2 | +---------+-------------+
以上是如何在 MySQL 中將逗號分隔的清單拆分為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!