Maison >base de données >tutoriel mysql >Comment diviser des listes séparées par des virgules dans MySQL pour la normalisation des données ?
Diviser des listes séparées par des virgules dans MySQL
Travailler avec des tables non normalisées contenant des valeurs de clé étrangère séparées par des virgules peut être difficile lors de la migration de données vers des systèmes qui manquent de langages procéduraux. Pour résoudre ce problème, MySQL fournit une méthode pour convertir ces listes en lignes normalisées.
Utilisation de la fonction FIND_IN_SET()
Pour diviser une liste séparée par des virgules en plusieurs lignes, MySQL propose la fonction FIND_IN_SET(). Cette fonction renvoie la position d'une valeur spécifique dans la liste. À l'aide de cette fonction, vous pouvez parcourir chaque valeur de la liste et insérer une nouvelle ligne dans une table temporaire.
La requête suivante montre comment diviser la colonne « matériel » de la table donnée en lignes normalisées :
CREATE TEMPORARY TABLE split_materials ( part_id INT, material_id INT ); INSERT INTO split_materials (part_id, material_id) SELECT part_id, CAST(SUBSTRING_INDEX(material, ';', 1) AS UNSIGNED) FROM my_table; INSERT INTO split_materials (part_id, material_id) SELECT part_id, CAST(SUBSTRING_INDEX(material, ';', -1) AS UNSIGNED) FROM my_table WHERE material LIKE '%,%';
Solutions alternatives
Si la fonction FIND_IN_SET() n'est pas appropriée, vous pouvez également explorez en utilisant :
Conclusion
Le fractionnement de listes séparées par des virgules en plusieurs lignes dans MySQL peut être réalisé à l'aide de la fonction FIND_IN_SET(), d'expressions régulières ou de JOIN. Cela vous permet de normaliser les données non normalisées et de les préparer à l'ingestion dans des systèmes qui ne prennent pas en charge les langages procéduraux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!