簡體   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