使用SQLite和JSON1的子查询

使用SQLite和JSON1的子查询,json,sqlite,android-sqlite,sqlite-cipher,Json,Sqlite,Android Sqlite,Sqlite Cipher,我刚刚发现了用于SQLite的JSON1,发现它是我需要在Android应用程序中处理的许多问题的完美答案(我正在使用SQLCipher,它提供了一个支持JSON1的SQLite版本)。这是非常好的,但没有涵盖诸如运行子查询之类的问题,这在任何情况下都超出了我的SQL能力 这是我的测试用例 我首先创建表 CREATE TABLE users(name TEXT,phone TEXT) 然后我向其中添加两行 INSERT INTO users (name,phone) VALUES('Joe B

我刚刚发现了用于SQLite的JSON1,发现它是我需要在Android应用程序中处理的许多问题的完美答案(我正在使用SQLCipher,它提供了一个支持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;
将返回结果[“1234567889”、“234567890”]


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

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

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