sql - 如何在数据库中查询 JSON
问题描述
我想从以这种格式创建的数据库中查询信息:
指数 | 标签 | 钥匙 | 数据 |
---|---|---|---|
1 | 运动鞋 | UPC | {“尺寸”:“价值”,“颜色”:“价值”,“位置”:“货架2”} |
2 | 地点 | 货架2 | {“高度”:“值”,“行”:“值”,“列”:“值”} |
其中大部分数据位于一个存储在 json 数组中的单元格中。让事情变得有点棘手,json 中的属性没有任何特定的顺序,有时它们会引用其他单元格。即,在上面的示例中,有一个“位置”属性在另一行中有更多数据。此外,有时数据单元格是一个多维数组,其中值嵌套在另一个 json 数组中。
我正在寻求执行某些查询任务,例如
- 查找所有有运动鞋的地点
- 或查找具有特定颜色等的所有运动鞋
业界公认的如何做到这一点的解决方案是什么?
这些是我目前使用DB Browser for SQLite来查询的 sqlite 数据库。如果存在更好的解决方案,绝对可以接受。
解决方案
您的设计需要 SQLite 的JSON1 扩展。
您在问题中提到的任务可以使用诸如json_extract()
.
查找所有有运动鞋的位置
SELECT t1.*
FROM tablename t1
WHERE t1.label = 'location'
AND EXISTS (
SELECT 1
FROM tablename t2
WHERE t2.label = 'sneaker'
AND json_extract(t2.data, '$.location') = t1.key
)
查找具有特定颜色的所有运动鞋
SELECT *
FROM tablename
WHERE label = 'sneaker'
AND json_extract(data, '$.color') = 'blue'
见演示。
对于更复杂的任务,例如从 json 数组中获取值,还有其他函数,例如json_each()
.
推荐阅读
- javascript - 使用 jsonp 的 Ajax 请求未通过
- google-sheets - 如何让 VLOOKUP 拉出多个实例?
- python - Python替换缺失值
- python - 如何模拟 datetime.datetime.now() 到 unittest 超时情况?
- javascript - 为什么下拉菜单在选择值时关闭
- javascript - req.file.map 不是函数
- python - 将分组条形图中每个条形的颜色更改为自定义颜色
- flutter - 使用 Flutter 中的“setByPostion”组件将递增的数字居中
- linux - 如何在 linux 中围绕 c/c++ 共享库创建我的瘦包装共享库
- javascript - 使用正则表达式从搜索中排除 HTML 标签而不删除 HTML 标签?