Maison >base de données >tutoriel mysql >Comment rejoindre des tables MySQL en fonction des identifiants stockés dans un champ JSON ?
Utiliser le champ JSON MySQL pour joindre des tables
Le stockage de données dans un champ JSON peut offrir de la flexibilité, mais cela présente également des défis lors de l'exécution d'opérations sur les données. . Dans cette enquête, l'objectif est de joindre une table à l'aide d'un champ JSON qui stocke un tableau d'ID.
Énoncé du problème
L'utilisateur a créé deux tables, l'utilisateur et user_group, ainsi qu'un champ JSON user_groups fictif dans la table user pour stocker une liste d'ID. L'utilisateur souhaite effectuer des opérations sur ce champ JSON et les utiliser dans SQL.
Plus précisément, l'utilisateur cherche à obtenir des résultats répertoriant les ID utilisateur, les noms d'utilisateur, les ID de groupe d'utilisateurs et les noms de groupe. Ces résultats doivent être joints en fonction des identifiants stockés dans le champ JSON.
Solution
Pour y parvenir, l'utilisateur peut exploiter la fonction JSON_CONTAINS. Cette fonction permet aux utilisateurs de vérifier si un document JSON contient une valeur ou une sous-requête spécifique.
Code
<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>
Explication
Solution alternative
Si l'utilisateur préfère, il peut également utiliser la fonction JSON_TABLE pour extraire le tableau d'ID du champ JSON et créer une table virtuelle. Cette approche permet plus de flexibilité dans la manipulation des données.
Code
<code class="sql">SELECT u.user_id, u.user_name, uv.user_group_id ( SELECT g.group_name FROM user_group g WHERE g.user_group_id = uv.user_group_id ) AS group_name FROM user u CROSS JOIN JSON_TABLE( u.user_groups, '$[*]' COLUMNS (user_group_id INT PATH '$') ) uv</code>
Explication
En tirant parti de ces techniques, les utilisateurs peuvent utiliser efficacement les champs JSON pour joindre des tables et effectuer des opérations de données complexes dans MySQL.
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!