SQLite 和 JSON1 的子查询
Subqueries with SQLite and JSON1
我刚刚为 SQLite 发现了 JSON1,并发现它是我在 Android 应用程序中需要处理的许多问题的完美答案(我正在使用 SQLCipher 提供支持 JSON1 的 SQLite 版本)。 SQLite documentation for JSON1 非常好,但没有涵盖诸如 运行 子查询之类的问题 - 这在任何情况下都超出了我的 SQL 能力范围。
这是我的测试用例
我首先创建 table
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"}');
然后我可以查询到 return,比如说,只有手机号码
SELECT json_extract(users.phone, '$.mobile') FROM users;
这将 return 结果 ["123456789","234567890"]
但是假设我想获取手机号码为 234567890 的用户的固定电话号码和姓名。我将如何使用可用的 json_*
原始函数编写子查询以便简单地 return 结果 ["Jane Bloggs","234567890"]?
我正在考虑关闭这个问题,但觉得留下它和答案对其他人更有用。 SQLite JSON1 文档实际上解释了如何做这些事情,尽管解释不是很明显。在这种情况下要发出的 SQL 将是
SELECT users.name FROM users,json_each(users.phone,'$.cell') WHERE json_each.value = '234567890'
我刚刚为 SQLite 发现了 JSON1,并发现它是我在 Android 应用程序中需要处理的许多问题的完美答案(我正在使用 SQLCipher 提供支持 JSON1 的 SQLite 版本)。 SQLite documentation for JSON1 非常好,但没有涵盖诸如 运行 子查询之类的问题 - 这在任何情况下都超出了我的 SQL 能力范围。
这是我的测试用例
我首先创建 table
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"}');
然后我可以查询到 return,比如说,只有手机号码
SELECT json_extract(users.phone, '$.mobile') FROM users;
这将 return 结果 ["123456789","234567890"]
但是假设我想获取手机号码为 234567890 的用户的固定电话号码和姓名。我将如何使用可用的 json_*
原始函数编写子查询以便简单地 return 结果 ["Jane Bloggs","234567890"]?
我正在考虑关闭这个问题,但觉得留下它和答案对其他人更有用。 SQLite JSON1 文档实际上解释了如何做这些事情,尽管解释不是很明显。在这种情况下要发出的 SQL 将是
SELECT users.name FROM users,json_each(users.phone,'$.cell') WHERE json_each.value = '234567890'