Rumah > Soal Jawab > teks badan
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>
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');