cari

Rumah  >  Soal Jawab  >  teks badan

Bolehkah saya menggunakan medan tatasusunan json dengan klausa IN

Saya menjalankan pertanyaan ini:

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

Walau bagaimanapun, dalam beberapa baris, terdapat berbilang item dalam tatasusunan Type json dan saya tidak mahu menggunakan item pertama sahaja seperti contoh di atas.

Andaikan ia ["Rumah", "Flat"] Saya mahu memadankan pertanyaan, tetapi juga apabila ia adalah ["Rumah", "Khemah"] sebagai salah satu item dalam senarai "Dalam". < /p>

Bolehkah ini dilaksanakan dalam pertanyaan? Saya telah cuba mencarinya, tetapi saya telah mencari contoh mencari sesuatu dalam tatasusunan JSON itu sendiri, tetapi bukan itu yang saya cari.

P粉066224086P粉066224086227 hari yang lalu323

membalas semua(1)saya akan balas

  • P粉373990857

    P粉3739908572024-04-05 09:39:35

    Ya, ini berfungsi (diuji dalam MySQL 8.0.32):

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

    Jika anda ingin menguji sebarang nilai dalam tatasusunan JSON yang sepadan dengan salah satu senarai nilai, gunakan JSON_OVERLAPS():

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

    Sudah tentu, ini akan menjadi lebih mudah jika bukannya menggunakan JSON untuk atribut berbilang nilai, anda menggunakan jadual bergantung dan menyimpan satu nilai setiap baris.

    select ...
    from housedata join housedata_type using (house_id)
    where housedata_type.type in ('House', 'Flat');

    balas
    0
  • Batalbalas