Maison >base de données >tutoriel mysql >Comment diviser des listes séparées par des virgules en plusieurs lignes dans MySQL ?

Comment diviser des listes séparées par des virgules en plusieurs lignes dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-06 11:51:41280parcourir

How to Split Comma-Separated Lists into Multiple Rows in MySQL?

Diviser des listes séparées par des virgules en plusieurs lignes dans MySQL

Problème :

Une table contient une colonne avec des valeurs séparées par des virgules qui servent de clés étrangères à une autre table. Comment ces données peuvent-elles être traitées, via une jointure ou une requête, pour créer plusieurs entrées dans une nouvelle table, « dénormalisant » efficacement les données ?

Solution :

MySQL propose une solution pour diviser ces listes séparées par des virgules à l'aide de la fonction FIND_IN_SET().

SELECT material_id
FROM materials
WHERE FIND_IN_SET(name, part.material) > 0;

Cette requête récupère le Material_id pour chaque nom de la table des matériaux présent dans la liste séparée par des virgules dans la colonne des matériaux de la table des pièces. Le résultat est un tableau aplati avec des paires de part_id et materials_id, comme vous le souhaitez.

Exemple :

Considérez les données suivantes :

+---------+-------------+
| part_id | material    |
+---------+-------------+
|     339 | 1.2mm;1.6mm |
|     970 | 1.6mm       |
+---------+-------------+

La requête suivante diviserait la colonne de matériaux en lignes distinctes :

SELECT part_id, material_id
FROM materials
WHERE FIND_IN_SET(name, part.material) > 0;

Le résultat serait être :

+---------+-------------+
| part_id | material_id |
+---------+-------------+
|     339 |           1 |
|     339 |           2 |
|     970 |           2 |
+---------+-------------+

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