我有一个表MYTABLE
,它有3列,如下所述。
|id | myclob_column | column3|
它有一个列(myclob_column
),是clob数据(json)。样本clob数据如下。
{
"name" : "Rahul",
"address" : [ {"street" : "100"}, {"street" : "200"} .....]
}
我想从street
值为'200'的表中获取所有行。
当我们硬编码职位时,下面的select query是有效的(在我们的例子[1]中):
select * from MYTABLE where JSON_VALUE(`myclob_column`, $.address[1].street) = '200';
但是我不能硬编码address
的位置,因为值(200)可以在任何位置。因此,我需要一个通用查询来匹配任何位置的street
为200。我尝试了很多事情,但都做不到。
3条答案
按热度按时间bzzcjhmw1#
您可以使用
json_table
将JSON数据转换为表中的行和列:Demo here
v9tzhpje2#
您可以解析JSON值并添加条件,而无需硬编码,如下所示,
你可以看到实时的sql here
rseugnpd3#
你可以在数组元素上使用
json_exists
和 predicate :UPD:如果你想使用
json_table
和where
过滤器,那么最好使用exists
predicate 或使用横向连接和一个访问表的子查询,如果有多行需要值,不要分解结果集。假设这个样本数据(还有一个
street: 200
条目):交叉连接:
exists
:或
cross join lateral
,带子查询:fiddle