#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 с тем же сценарием?