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 ?

Comment diviser des listes séparées par des virgules dans MySQL pour la normalisation des données ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-06 11:41:411059parcourir

How to Split Comma-Separated Lists in MySQL for Data Normalization?

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 :

  • Expressions régulières pour extraire les valeurs de la liste.
  • Opérations JOIN ​​pour corréler la liste séparée par des virgules à la clé étrangère table.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn