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

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

DDD
DDDoriginal
2024-12-14 10:04:10240parcourir

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

Joindre des tables avec des valeurs séparées par des virgules : un guide complet

Les tables de base de données contiennent souvent des valeurs séparées par des virgules dans certaines colonnes. Cela pose un défi lors de l'interrogation des données, car chaque valeur doit être associée à sa ligne correspondante. Un scénario courant consiste à joindre deux tables où une colonne contient des valeurs séparées par des virgules faisant référence à l'autre table.

Considérons l'exemple suivant :

Tableau Notes

nid forDepts
1 1,2,4
2 4,5

Tableau des positions

id name
1 Executive
2 Corp Admin
3 Sales
4 Art
5 Marketing

L'objectif consiste à associer la colonne « forDepts » de la table Notes aux noms de département correspondants de la table Positions. Le résultat souhaité doit être :

nid DepartmentName
1 Executive, Corp Admin, Art
2 Art, Marketing

Sans modifier la structure de la base de données, cela peut être obtenu en utilisant une combinaison de fonctions SQL.

En utilisant FIND_IN_SET et GROUP_CONCAT

Une combinaison des fonctions FIND_IN_SET et GROUP_CONCAT peut être utilisée pour extraire et agréger les noms de département pour chaque Valeur 'forDepts' :

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

Comment ça marche

  • La fonction FIND_IN_SET vérifie si une valeur spécifiée existe dans une chaîne séparée par des virgules. Dans ce cas, il est utilisé pour déterminer si la valeur 'forDepts' dans la table Notes contient l'identifiant d'un département dans la table Positions.
  • La clause INNER JOIN correspond aux lignes des tables Notes et Positions où le La condition FIND_IN_SET est vraie.
  • La fonction GROUP_CONCAT agrège les noms de département correspondants pour chaque « nid » dans la table Notes. La clause ORDER BY garantit que les noms sont triés par ordre croissant en fonction de leur identifiant.

Résultat

La sortie de la requête serait la table souhaitée avec la colonne 'nid' jointe au 'DepartmentName' correspondant séparé par des virgules column.

Conclusion

En tirant parti des fonctions FIND_IN_SET et GROUP_CONCAT, nous pouvons joindre efficacement deux tables avec des valeurs séparées par des virgules, ce qui nous permet d'extraire et d'agréger des données entre les tables. , même lorsque la structure de la base de données n'est pas normalisée. Cette technique s'avère particulièrement utile lors de l'exportation de données vers d'autres applications, comme Excel.

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