3

我刚刚发现了 SQLite 的 JSON1,并发现它可以完美地解决我需要在我的 Android 应用程序中处理的许多问题(我正在使用 SQLCipher,它提供了支持 JSON1 的 SQLite 版本)。JSON1的SQLite 文档非常好,但没有涵盖诸如运行子查询之类的问题——无论如何,这在某种程度上超出了我的 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" ]?

4

1 回答 1

4

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

SELECT users.name FROM users,json_each(users.phone,'$.cell') WHERE json_each.value = '234567890'
于 2018-02-19T17:13:18.237 回答