我正在尝试使用 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
运算符