Puis-je utiliser le champ de tableau JSON avec la clause IN
P粉066224086
P粉066224086 2024-04-04 10:51:09
0
1
371

J'ai cette requête en cours d'exécution :

select * 
from housedata 
where JSON_EXTRACT(properties->"$.Type", '$[0]') in ('House', 'Flat');

Cependant, dans certaines lignes, il y a plusieurs éléments dans le tableau Type json et je ne souhaite pas utiliser uniquement le premier élément comme dans l'exemple ci-dessus.

Supposons qu'il s'agisse de ["Maison", "Plat"] Je souhaite faire correspondre la requête, mais aussi lorsqu'il s'agit de ["Maison", "Tente"] comme l'un des éléments de la liste "Dans". < /p>

Cela peut-il être implémenté dans une requête ? J'ai essayé de le trouver, mais j'ai cherché des exemples de recherche de quelque chose dans le tableau JSON lui-même, mais ce n'est pas ce que je recherche.

P粉066224086
P粉066224086

répondre à tous(1)
P粉373990857

Oui, cela fonctionne (testé dans MySQL 8.0.32) :

select json_extract(properties->'$.Type', '$[0]') IN ('House', 'Flat') as result 
from housedata;
+--------+
| result |
+--------+
|      1 |
+--------+

Si vous souhaitez tester une valeur du tableau JSON qui correspond à l'une des listes de valeurs, utilisez JSON_OVERLAPS() :

select true from housedata
where json_overlaps(properties->'$.Type',
  cast('["House","Flat"]' as json));
+------+
| true |
+------+
|    1 |
+------+

Bien sûr, ce serait beaucoup plus simple si, au lieu d'utiliser JSON pour les attributs à valeurs multiples, vous utilisiez une table dépendante et stockiez une valeur par ligne.

select ...
from housedata join housedata_type using (house_id)
where housedata_type.type in ('House', 'Flat');
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal