我在使用数组过滤数据时遇到问题 我有专栏
userid,event_name,attributes,ti
属性列有这样的值
{"bool_sample":true,"array_int":[10,20,25,38],"array_string":["hello","world","i am fine"]}
我的询问
SELECT * FROM "events-data" CROSS JOIN UNNEST(CAST(json_extract(attributes, '$["array_int"]') AS array<int>)) AS t(val)
WHERE val > 9;
此查询过滤数据,但它为同一条记录提供了多行,对于上面的属性列记录,它为我提供了 4 行
userid,event_name,attributes,ti,val
test-userid,test-event,test-attributes,10
test-userid,test-event,test-attributes,20
test-userid,test-event,test-attributes,25
test-userid,test-event,test-attributes,38
我不需要多行
无需与 UNNEST 提取的数据进行 CROSS JOIN。检查
exists
。
尝试
SELECT * FROM "events-data"
WHERE exists (
select val
from UNNEST(CAST(json_extract_path(attributes, '$.["array_int"]') AS int[])) AS t(val)
where val>9)
;