我正在尝试使用json1扩展名查询我的sqlite数据库,并想查询一个json数组以匹配多个值并返回与所有值匹配的条目。
实体示例:
实体1:
{
EntityID: 123,
tags: [tag1, tag2, tag3]
}
实体2:
{
EntityID: 234,
tags: [tag2, tag3]
}
在此示例中,我要查询与多个值匹配的标签。如果我的输入是[tag1, tag2]
,那么我只想返回Entity 1
,而如果我的输入是tag2
,那么我想返回两个实体。
我期望的查询是
SELECT *
FROM entities, json_each(tags)
WHERE json_each.value IS "tag1"
AND json_each.value IS "tag2"
但是此查询在所有情况下均失败。至于为什么失败,我认为它会尝试将数组的每个值都匹配为tag1
和tag2
,但事实并非如此,因为每个元素只有1个值。这是有效的还是有其他解释?
在检查[tag1, tag2]
值并仅返回Entity 1
的非常特殊的用例中,对我有用的查询是
SELECT *
FROM entities, json_each(tags)
WHERE json_each.value IS "tag1" OR "tag2"
我想知道为什么在上述情况下它可以工作?我唯一想到的是它检查数组的每个值是tag1
还是tag2
,但我不明白为什么它返回也有值的Entity 1
tag3
中的,并且不符合条件。但是,在大多数其他情况下,例如在我搜索[tag3, tag4]
的情况下,这种情况将失败,在这种情况下,它会返回两个实体,但不应返回任何实体。所以这绝对不是答案
我仍然无法找到正确的方法来有效地进行查询,并正在寻找任何建议。
理想情况下,如果有一种甚至更简单的查询方法,那么将不胜感激。我想到的是,我可以为查询提供标记值的列表,并且它与所有标记值都匹配,而无需我使用AND
/ OR
运算符
答案 0 :(得分:0)
第一个查询首先获取tag1,将其与tag1和tag2比较,然后失败,然后获取另一个值。失败,因为该值不能同时为tag1和tag2。
我建议使用嵌套查询,将from子句替换为另一个查询