Effectuer des jointures sur des champs JSON dans MySQL
Question :
Dans une base de données avec un Champ JSON stockant une liste d'identifiants, est-il possible d'effectuer des opérations SQL sur ce champ et de les utiliser pour se joindre à un autre table ?
Exemple :
Considérons les tableaux suivants :
<code class="sql">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) );</code>
Nous souhaitons créer une requête qui renvoie les résultats suivants :
user_id | user_name | user_group_id | group_name| ------------------------------------------------- 101 | John | 1 | Group A 101 | John | 3 | Group C
Où user_groups stocke la liste [1, 3], représentant le groupe ID.
Réponse :
Oui, il est possible d'effectuer des jointures sur des champs JSON dans MySQL. Grâce à la fonction JSON_CONTAINS, nous pouvons vérifier si une valeur JSON contient une valeur spécifique :
<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>
Dans cette requête, JSON_CONTAINS vérifie si le champ user_groups contient la valeur user_group_id. Si tel est le cas, il inclut la ligne dans le jeu de résultats. L'opérateur $ dans cette fonction indique qu'elle doit rechercher la valeur spécifiée n'importe où dans le tableau.
Cette technique vous permet d'effectuer des jointures sur des champs JSON et d'extraire les données pertinentes des structures imbriquées.
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!