首页 > 解决方案 > 如何在 Sqlite 中加入多个 JSON 列

问题描述

我正在寻找在同一个表中加入多个 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 时,我得到一个语法错误。

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

标签: jsonsqlitejoinsqlite-json1

解决方案


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

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

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

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

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

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


推荐阅读