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

Comment diviser les valeurs séparées par des virgules dans SQL en plusieurs lignes ?

Patricia Arquette
Libérer: 2025-01-24 04:22:11
original
132 Les gens l'ont consulté

How to Split Comma-Separated Values in SQL into Multiple Rows?

Transformation de valeurs SQL séparées par des virgules en plusieurs lignes

Une tâche SQL fréquente consiste à diviser le contenu d'une seule cellule en plusieurs lignes. Par exemple, considérons ce tableau :

<code class="language-sql">id | name
1  | a,b,c
2  | b</code>
Copier après la connexion

Le but est de restructurer ces données comme ceci :

<code class="language-sql">id | name
1  | a
1  | b
1  | c
2  | b</code>
Copier après la connexion

Méthode 1 : Exploiter une table de nombres

Une solution efficace utilise un tableau de « nombres » préexistant (un tableau contenant une liste séquentielle d'entiers). La requête ci-dessous illustre cette approche :

<code class="language-sql">SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  numbers
INNER JOIN
  tablename
ON
  CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n</code>
Copier après la connexion

Méthode 2 : génération dynamique de nombres (aucune table de nombres requise)

Si une table de numéros dédiée n'est pas disponible, une séquence de numéros temporaire peut être générée dans la requête elle-même :

<code class="language-sql">SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  (SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) AS numbers
INNER JOIN
  tablename
ON
  CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n</code>
Copier après la connexion

N'oubliez pas d'ajuster la section UNION ALL dans la deuxième méthode pour accueillir le nombre maximum de valeurs séparées par des virgules que vous prévoyez dans votre colonne name. Les deux méthodes obtiennent le même résultat : diviser les valeurs séparées par des virgules en lignes individuelles.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal