【问题标题】:Sqlite.net JSON extension syntaxSqlite.net JSON 扩展语法
【发布时间】:2019-04-16 21:14:28
【问题描述】:

我正在尝试了解 Sqlite JSON 扩展的工作原理。假设一家公司有几个分支机构,每个分支机构都有一个股票目录,所以我创建了一个如下表:-

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

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

SQL = "INSERT INTO BranchStock (branch, stock) values('Melbourne', json_array(json_object('catnumber', 'ABC123', 'instock',2), json_object('catnumber', 'BCD321', 'instock',5)))"
....

SQL = "INSERT INTO BranchStock (branch, stock) values('Sydney', json_array(json_object('catnumber', 'ABC123', 'instock',5), json_object('catnumber', 'XYZ567', 'instock',3)))"
....

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

SQL = "SELECT branch, json_extract(stock, '$[].instock') FROM BranchStock WHERE json_valid(stock) AND json_extract(stock, '$[].catnumber') = 'ABC123'

有人可以帮助我正确的 SELECT 语法吗?

提前致谢

【问题讨论】:

    标签: json sqlite sqlite-net


    【解决方案1】:

    注意:我不建议将它实际用于任何将要经常运行或在大桌子上运行的东西,但如果你绝对必须......

    给定以下测试表:

    CREATE TABLE BranchStock(branch TEXT, stock TEXT);
    INSERT INTO BranchStock VALUES('Melbourne','[{"catnumber":"ABC123","instock":2},{"catnumber":"BCD321","instock":5}]');
    INSERT INTO BranchStock VALUES('Sydney','[{"catnumber":"ABC123","instock":5},{"catnumber":"XYZ567","instock":3}]');
    

    获取'ABC123'的店铺的分店和库存号:

    SELECT branch, json_extract(value, '$.instock') AS instock
    FROM BranchStock JOIN json_each(stock)
    WHERE json_extract(value, '$.catnumber') = 'ABC123';
    

    给予

    branch      instock   
    ----------  ----------
    Melbourne   2         
    Sydney      5      
    

    使用像这样的表定义来做几乎任何事情都会更容易和更有效

    CREATE TABLE BranchStock(branch TEXT, catid TEXT, instock INTEGER);
    

    而不是尝试搜索存储在列中的 JSON 数据。例如:

    SELECT branch, instock FROM BranchStock WHERE catid = 'ABC123';
    

    尤其是当您开始在组合中添加索引时。

    【讨论】:

    • 非常感谢,这正是我想要的。我认为您的观点是,它不是性能解决方案 - 但它确实提供了一个简单的数据库设计......再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多