Bolehkah saya menggunakan medan tatasusunan json dengan klausa IN
P粉066224086
P粉066224086 2024-04-04 10:51:09
0
1
320

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粉066224086
P粉066224086

membalas semua(1)
P粉373990857

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');
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan