Maison >base de données >tutoriel mysql >Comment joindre des tables avec des champs de jointure séparés par des virgules dans SQL ?

Comment joindre des tables avec des champs de jointure séparés par des virgules dans SQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 07:41:01337parcourir

How to Join Tables with Comma-Separated Join Fields in SQL?

Joindre des tables avec des champs de jointure séparés par des virgules

Lorsque vous travaillez avec des tables contenant des listes séparées par des virgules, il devient difficile d'effectuer des jointures à l'aide de méthodes conventionnelles. méthodes. Dans ce cas, nous rencontrons deux tables, "catégories" et "films", où la colonne "catégories" de la table "films" contient plusieurs identifiants de catégorie séparés par des virgules.

Pour réaliser une jointure qui récupère le noms de catégories correspondants au lieu des identifiants bruts dans la colonne "catégories", nous pouvons exploiter la requête SQL suivante :

select
    m.id,
    group_concat(c.name)
from
    movies m
    join categories c on find_in_set(c.id, m.categories)
group by
    m.id

Cette requête utilise la fonction find_in_set() pour déterminer si un ID de catégorie spécifié dans la table « catégories » existe dans la liste séparée par des virgules stockée dans le champ « m.categories ». En vérifiant de manière itérative chaque catégorie candidate de la table « catégories » par rapport à la valeur « m.categories », la requête identifie les catégories correspondantes.

La fonction group_concat() est ensuite utilisée pour agréger les noms de catégories correspondantes dans un tableau. , en les concaténant dans un seul champ de chaîne pour chaque ligne du jeu de résultats. Enfin, la requête regroupe les résultats par colonne "m.id", garantissant que chaque ID de film n'apparaît qu'une seule fois dans la sortie.

En conséquence, cette requête remplace efficacement les ID de catégorie séparés par des virgules dans le table "movies" avec les noms de catégories correspondants, effectuant efficacement une opération de jointure sur des tables avec des champs de jointure non traditionnels.

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