Подзапросы с SQLite и JSON1

Я только что обнаружил JSON1 для SQLite и обнаружил, что это будет идеальным ответом на многие проблемы, с которыми мне придется столкнуться в моем приложении для Android (я использую SQLCipher, который предлагает версию SQLite с поддержкой JSON1). документация по SQLite для 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"]?

1 ответ

Решение

Я думал о закрытии этого вопроса, но чувствовал, что оставить его и ответ будет более полезным для других. Документация по SQLite JSON1 фактически объясняет, как делать такие вещи, хотя объяснения не очевидны. SQL для выдачи в этом случае будет

SELECT users.name FROM users,json_each(users.phone,'$.cell') WHERE json_each.value = '234567890'
Другие вопросы по тегам