[英]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"
但是这个查询在所有情况下都失败了。 至于它为什么失败,我认为它试图将数组的每个值匹配为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
运算符
第一个查询首先获取 tag1,将它与 tag1 和 tag2 进行比较,失败然后获取另一个值。 它失败是因为值不能同时是 tag1 和 tag2。
我建议使用嵌套查询,用另一个查询替换 from 子句
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.