导入的数据库表:
id | JSON
-------------|---------
Signed 32int | Raw JSON
通过JSON数据的属性进行搜索比通过行本身的id进行搜索更容易。每段JSON数据都包含(对于本演示):
json: {
displayProperties: {},
hash: "foo"
itemType: "bar"
}
当我选择我想要匹配散列,然后通过匹配的itemType
过滤那些结果。
我的疑问是:
SELECT json_extract(ItemDefinition.json, '$')
FROM ItemDefinition, json_tree(ItemDefinition.json, '$')
WHERE json_tree.key = 'hash' AND json_tree.value IN ${hashList}
但是,这将返回具有匹配散列值的每一项。从这里开始,我还想通过键:itemType
和值:“19”进行筛选。所以我试着:
SELECT json_extract(ItemDefinition.json, '$')
FROM ItemDefinition, json_tree(ItemDefinition.json, '$')
WHERE json_tree.key = 'hash' AND json_tree.value IN ${hashList}
AND WHERE json_tree.key = 'itemType' AND json_tree.value = 19
但这在语法上是不正确的,更不用说输出我正在寻找的东西了。错误:
SQLITE_ERROR:靠近“WHERE”:语法错误
1条答案
按热度按时间l7wslrjt1#
这道题的题目与我想要的并不相符。我不知道json_tree到底做了什么。Json_tree实际上使用数据库填充的值构建了一个新对象。
我实际上想要的是根据json列中的特定值进行过滤,这可以通过json_Extract来实现。
json_extract('{column}', $.{filterValue})
将把原始json对象从json列中拉出这就是现在对我有效的查询:
这将从ItemDefinition中选择json列
从json列创建一个json_tree
按json树
key
和value
筛选结果最终通过原始json列中的属性
itemType
进行筛选