Maison  >  Questions et réponses  >  le corps du texte

Puis-je utiliser le champ de tableau JSON avec la clause IN

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粉066224086P粉066224086178 Il y a quelques jours270

répondre à tous(1)je répondrai

  • P粉373990857

    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');

    répondre
    0
  • Annulerrépondre