Maison > base de données > tutoriel mysql > Comment joindre deux tables avec des valeurs séparées par des virgules à l'aide de SQL ?

Comment joindre deux tables avec des valeurs séparées par des virgules à l'aide de SQL ?

Patricia Arquette
Libérer: 2024-12-18 11:17:10
original
984 Les gens l'ont consulté

How to Join Two Tables with Comma-Separated Values Using SQL?

Joindre deux tables avec des valeurs séparées par des virgules

Énoncé du problème

La normalisation de la base de données peut grandement améliorer la gestion des données, mais parfois des limitations structurelles empêchent la mise en œuvre. Cette question explore une méthode pour associer des valeurs séparées par des virgules dans une table avec les valeurs d'une deuxième table lorsque la normalisation n'est pas une option.

Solution

Dans le scénario fourni , nous visons à combiner les valeurs de la colonne « forDepts » de la table Notes avec leurs noms correspondants de la table Positions. Le résultat attendu est une liste d'ID de notes ("nid") avec les noms de département associés concaténés et séparés par des virgules.

Pour y parvenir, nous pouvons utiliser la fonction FIND_IN_SET() et la fonction GROUP_CONCAT(). Voici la requête SQL :

SELECT  a.nid,
        GROUP_CONCAT(b.name ORDER BY b.id) DepartmentName
FROM    Notes a
        INNER JOIN Positions b
            ON FIND_IN_SET(b.id, a.forDepts) > 0
GROUP   BY a.nid
Copier après la connexion

Explication

  • La fonction FIND_IN_SET() vérifie si une valeur est présente dans une chaîne séparée par des virgules. Dans ce cas, nous l'utilisons pour déterminer si un identifiant de service de la table Positions se trouve dans la colonne « forDepts ».
  • La clause INNER JOIN garantit que seules les lignes correspondantes des deux tables sont combinées.
  • La fonction GROUP_CONCAT() concatène les noms des départements correspondants, classés par leurs identifiants, et les sépare par virgules.

Notes supplémentaires

Le code PHP fourni semble afficher uniquement la première valeur de la colonne « forDepts ». Cela est probablement dû au LEFT JOIN utilisé dans la requête. Pour récupérer toutes les valeurs, envisagez plutôt d'utiliser un INNER JOIN.

Cette approche peut être appliquée dans des situations où les données sont stockées dans un format séparé par des virgules et où vous devez les associer à d'autres valeurs sans restructurer la base de données.

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