Kann ich ein JSON-Array-Feld mit der IN-Klausel verwenden?
P粉066224086
P粉066224086 2024-04-04 10:51:09
0
1
318

Ich habe diese Abfrage ausgeführt:

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

Allerdings gibt es in einigen Zeilen mehrere Elemente im Type-JSON-Array und ich möchte nicht nur das erste Element verwenden, wie im obigen Beispiel.

Angenommen, es ist [„Haus“, „Wohnung“], ich möchte mit der Abfrage übereinstimmen, aber auch, wenn es [„Haus“, „Zelt“] als eines der Elemente in der „In“-Liste ist. < /p>

Kann dies in einer Abfrage implementiert werden? Ich habe versucht, es zu finden, aber ich habe nach Beispielen dafür gesucht, etwas im JSON-Array selbst zu finden, aber das ist nicht das, wonach ich suche.

P粉066224086
P粉066224086

Antworte allen(1)
P粉373990857

是的,这有效(在 MySQL 8.0.32 中测试):

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

如果您想测试 JSON 数组中与值列表之一匹配的任何值,请使用 JSON_OVERLAPS():

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

当然,如果您不使用 JSON 作为多值属性,而是使用依赖表并每行存储一个值,那么这会简单得多。

select ...
from housedata join housedata_type using (house_id)
where housedata_type.type in ('House', 'Flat');
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage