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