Как получить данные из поля массива JSON в SQL

0

Я использую node.js с squel.js для базы данных SQL. Я храню массив строк в одном поле таблицы.

Скажем, мое табличное имя похоже на XYZ. И мои данные таблицы похожи

id   col2
1    '["a", "b", "x", "y"]'
2    '["x", "y", "q"]'
3    '["q", "e"]'
4    '["p", "q"]'

Теперь я хочу знать, как сделать запрос для поиска, например, если я хочу, как сделать запрос, если я хочу получать записи, такие как

  1. Если я хочу получить все записи, которые содержат как ["x", "y"]. В этом сценарии я хочу ожидать результат id 1 и 2.
  2. Если я хочу получить все записи, которые содержат как ["q"]. В этом сценарии я хочу ожидать результата 2 и 4.

Пожалуйста, помогите мне здесь, я застрял здесь. Заранее спасибо.

  • 0
    Что ты пытался сделать? Вы действительно пытались? Вы искали какой-либо путь в документации da lib?
Теги:

2 ответа

0

col2 может быть столбцом JSON, поэтому вы можете сделать что-то вроде:

SELECT * FROM XYZ WHERE JSON_CONTAINS(col2, JSON_ARRAY('x', 'y'));
SELECT * FROM XYZ WHERE JSON_CONTAINS(col2, JSON_ARRAY('q'));

Второй запрос будет возвращать строки 2, 3 и 4, но я предполагаю, что ваше ожидание может быть неправильно указано, так как 'q' существует в массиве col2 для всех этих.

0

Если я правильно понимаю ваш вопрос, просто используйте LIKE чтобы это сделать

Для первого требования вы можете использовать

SELECT * FROM yourtable WHERE col2 LIKE '%"x"%' AND col2 LIKE '%"y"%'

ИЛИ ЖЕ

SELECT * FROM yourtable WHERE col2 LIKE '%"x","y"%'

Поскольку я точно не знаю формат, это просто проверка совпадений x и y? Или просто совпадение "x","y" точно?

Для второго требования вы можете использовать

SELECT * FROM yourtable WHERE col2 LIKE '%"q"%'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню