Поиск строк в столбце массива json

#sql #arrays #json #postgresql #where-clause

#sql #массивы #json #postgresql #where-предложение

Вопрос:

У меня есть эта таблица PostgreSQL:

 id | something
1  | ["something1", "something2", "something3"]
2  | ["something1"]
3  | ["something2", "something4"]
  

Я использую этот запрос, чтобы получить все данные, содержащие строку something1 в something столбце:

 select * from my_table where (something)::jsonb ? 'something1'
  

Как я могу изменить (или есть лучший способ) этот запрос, чтобы получить все данные, которые он содержит something1 OR something2 ?

Ответ №1:

Вы можете использовать ? :

 where something::jsonb ? 'something1'
  

Чтобы проверить наличие нескольких возможных значений, используйте ?| для текстового массива:

 where something::jsonb ?| array['something1', 'something2']
  

Это проверяет, существует ли какое-либо значение из массива в массиве jsonb. Если вы хотите проверить, существуют ли все элементы массива в полезной нагрузке jsonb, используйте ?amp; вместо этого.

Комментарии:

1. Это именно то, что я искал, спасибо, чувак!

2. @aletede91 можете ли вы рассказать, как написать тот же запрос в mysql с тем же сценарием?