【问题标题】:How to join multiple JSON columns in Sqlite如何在 Sqlite 中加入多个 JSON 列
【发布时间】:2019-04-30 17:46:36
【问题描述】:

我正在寻找在同一个表中连接多个 JSON 列的 Sqlite 语法。我创建了一个类似的表:-

SQL = "CREATE TABLE BranchStock (branch VARCHAR, oldstock JSON, newstock JSON)"
....

然后我插入一些项目,例如:-

INSERT INTO BranchStock VALUES('Melbourne','[{"catnumber":"ABC123","instock":5},{"catnumber":"BCD321","instock":3}]','[{"catnumber":"ABC123","instock":1},{"catnumber":"BCD321","instock":5}]');
INSERT INTO BranchStock VALUES('Sydney','[{"catnumber":"ABC123","instock":7},{"catnumber":"XYZ567","instock":0}]','[{"catnumber":"ABC123","instock":5},{"catnumber":"XYZ567","instock":3}]');
....

现在我正在寻找搜索 sql 以列出哪些分支具有 catnumber='ABC123' newstock 或 oldstock,以及库存数量。也许是这样的:-

SELECT * FROM BranchStock 
   JOIN json_each(oldstock) ON json_valid(oldstock)
   JOIN json_each(newstock) ON json_valid(newstock)
   WHERE json_extract(value, '$.name')='ABC123');

上述方法适用于一个 JOIN,但是当我实现第二个 JOIN 时,我得到一个语法错误。

有人知道正确的语法吗? 提前致谢。

【问题讨论】:

  • 重新考虑您的数据库设计。每个项目只有一行的表格比尝试在单个单元格中存储多个项目要好得多。

标签: json sqlite join sqlite-json1


【解决方案1】:

您没有具体说明“语法”错误,所以我试了一下。

此 SQL 在 WHERE 子句中的最后一个 ) 上给出语法错误。 一旦修复,它就会抱怨列名不明确,这可以通过给json_eachs 起别名来修复。还有更多的抱怨,但这是一个反复的过程。

我得到了(我的解释)它的工作,这很有趣!所以坚持下去。

提示:我改变了(两个)连接像这样

LEFT JOIN json_each(oldstock) os ON json_valid(oldstock) and json_extract(os.value,'$.catnumber') = 'ABC123'

[我不会与 @Shawn 的评论争论,但我使用了这种方法,它对我有用,到目前为止已经节省了很多重构!]

【讨论】:

  • 谢谢。 “最后一个”是剪切和粘贴到这里的受害者(已经很晚了)。拥有可变数量的列(可索引的,在一个表中)解决的问题并不多见。感谢您提供有关别名的提示。您是否获得了可以完全使用的版本?分享?
  • 为答案添加了提示。
猜你喜欢
  • 2020-04-11
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2020-03-10
  • 2021-11-21
  • 1970-01-01
相关资源
最近更新 更多