我刚刚发现了 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'


