我有一个 skillSets
表,其中包含以下字段。
skillSets
-------------------------
userId -> multiple rows for same users
data: JSON {
skillId
}
type
clientId
我想要所有在传递数组中拥有所有技能的用户。
所以如果用户有 skills a, b and not c it should be ignored for skills in (a, b, c)
。
但它应该选择用户which have skills a, b, c for skills in (a b, c)
它还应该选择用户 which have skills a, b, c, d for skills in (a, b, c)
Select userid, data, type
from g.skillSets where
clientid='cce2032a-fd3d-48a1-8e4c-417eb77776c3'
and type = 'Skill Item'
AND JSONB_EXTRACT_PATH_TEXT(g.skillSets.data,'skillId') in ('72c28245-968f-11eb-b30a-87bc1ba467bd','84737607-968f-11eb-b30a-87bc1ba467bd','cca8631f-968f-11eb-b30a-87bc1ba467bd');
答案 0 :(得分:0)
使用 jsonb
包含运算符 @>
:
... WHERE data @> '{ "skillId": [ "a", "b", "c" ] }'
data
上的 GIN 索引可以支持这种情况。