Maison >base de données >tutoriel mysql >Comment joindre des tables MySQL en fonction des données d'un champ JSON ?

Comment joindre des tables MySQL en fonction des données d'un champ JSON ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 15:04:03510parcourir

How can you join MySQL tables based on data within a JSON field?

Utilisation du champ MySQL JSON pour les jointures de tables complexes

Problème :

Dans une base de données MySQL schéma, un champ JSON stocke une liste d’ID. Le but est d'effectuer des opérations sur ce champ JSON et d'utiliser les résultats dans une requête SQL pour joindre la table utilisateur à une table de groupe d'utilisateurs.

Exemple de scénario :

Considérez les tableaux suivants :

CREATE TABLE user (
    user_id INT,
    user_name VARCHAR(50),
    user_groups JSON
);

CREATE TABLE user_group (
    user_group_id INT,
    group_name VARCHAR(50)
);

Avec les données suivantes :

INSERT INTO user_group (user_group_id, group_name) VALUES (1, 'Group A');
INSERT INTO user_group (user_group_id, group_name) VALUES (2, 'Group B');
INSERT INTO user_group (user_group_id, group_name) VALUES (3, 'Group C');

INSERT INTO user (user_id, user_name, user_groups) VALUES (101, 'John', '[1,3]');

Résultat souhaité :

Le résultat souhaité est une requête qui récupère les données suivantes :

user_id | user_name | user_group_id | group_name|
-------------------------------------------------
101     | John      | 1             | Group A
101     | John      | 3             | Group C

Solution :

La solution consiste à utiliser la fonction JSON_CONTAINS pour vérifier si l'ID du groupe d'utilisateurs existe dans le champ JSON de l'utilisateur table.

<code class="sql">SELECT 
       u.user_id, 
       u.user_name, 
       g.user_group_id,
       g.group_name
   FROM user u
   LEFT JOIN user_group g on JSON_CONTAINS(u.user_groups, CAST(g.user_group_id as JSON), '$')</code>

Remarque :

L'opérateur $ dans la fonction JSON_CONTAINS représente la racine du document JSON.

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