Maison > Article > base de données > Comment joindre des tables MySQL en fonction des données d'un champ JSON ?
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!