Подзапросы с 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'