Maison > Questions et réponses > le corps du texte
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>
P粉3739908572024-04-05 09:39:35
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');