Skip to main content
 首页 » 编程设计

json之SQLite 和 JSON1 的子查询

2025年05月04日82虾米哥

我刚刚发现了 SQLite 的 JSON1,并发现它是我需要在我的 Android 应用程序中处理的许多问题的完美答案(我正在使用 SQLCipher,它提供了一个支持 JSON1 的 SQLite 版本)。 SQLite documentation for JSON1 非常好,但没有涵盖诸如运行子查询之类的问题——这在任何情况下都超出了我的 SQL 能力范围。

这是我的测试用例

我从创建表格开始

CREATE TABLE users(name TEXT,phone TEXT) 

然后我向其中添加两行

INSERT INTO users (name,phone) VALUES('Joe Bloggs','{"mobile": 
"123456789","land":"987654321"}'); 
 
INSERT INTO users (name,phone) VALUES('Jane Bloggs','{"mobile": 
"234567890","land":"098765432"}'); 

然后我可以查询返回,比如说,只返回手机号码

 SELECT json_extract(users.phone, '$.mobile') FROM users; 

这将返回结果 ["123456789","234567890"]

但假设我想获取手机号码为 234567890 的用户的固定电话号码和姓名。我将如何使用可用的 json_* 原始函数编写子查询以便简单地返回结果 ["Jane Bloggs","234567890"]?

请您参考如下方法:

我正在考虑关闭这个问题,但觉得留下它和答案对其他人更有用。 SQLite JSON1 文档实际上解释了如何做这些事情,尽管解释不是很明显。在这种情况下发出的 SQL 是

SELECT users.name FROM users,json_each(users.phone,'$.cell') WHERE json_each.value = '234567890'