繁体   English   中英

在sqlite中使用json1查询多个值的JSON数组

[英]Query a JSON array for multiple values using json1 in sqlite

我正在尝试使用 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"

但是这个查询在所有情况下都失败了。 至于它为什么失败,我认为它试图将数组的每个值匹配为tag1tag2 ,但情况并非如此,因为每个元素只有 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运算符

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM