2

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

4

1 回答 1

0

第一个查询首先获取 tag1,将其与 tag1 和 tag2 进行比较,失败然后获取另一个值。它失败了,因为值不能同时是 tag1 和 tag2。

我建议使用嵌套查询,用另一个查询替换 from 子句

于 2019-04-11T04:59:43.200 回答