【问题标题】:How to Query JSON Within A Database如何在数据库中查询 JSON
【发布时间】:2021-09-27 13:09:58
【问题描述】:

我想从以这种格式创建的数据库中查询信息:

index label key data
1 sneaker UPC {“size”: “value”, “color”: “value”, “location”: “shelf2”}
2 location shelf2 {“height”: “value”, “row”: “value”, “column”: “value”}

其中大部分数据位于一个存储在 json 数组中的单元格中。让事情变得有点棘手,json 中的属性没有任何特定的顺序,有时它们会引用其他单元格。即,在上面的示例中,有一个“位置”属性在另一行中有更多数据。此外,有时数据单元格是一个多维数组,其中值嵌套在另一个 json 数组中。

我正在寻求执行某些查询任务,例如

  • 查找所有有运动鞋的地点
  • 或查找所有具有特定颜色等的运动鞋

关于如何做到这一点,业界公认的解决方案是什么?

这些是我目前使用DB Browser for SQLite 查询的 sqlite 数据库。如果存在更好的解决方案,绝对愿意接受。

【问题讨论】:

  • 如果它使用的是使用 JSON1 扩展构建的 sqlite 版本,则微不足道。
  • 尽管您的数据库设计可以承受一些规范化工作。

标签: sql json sqlite


【解决方案1】:

你有的设计需要SQLite的JSON1 extension

您在问题中提到的任务可以通过使用 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'

请参阅demo

对于更复杂的任务,例如从 json 数组中获取值,还有其他函数,例如 json_each()

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2015-09-11
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多