@uroot

Почему один запрос работает, а другой нет?

Этот SQL-запрос работает:

select * from sms_campaigns as c where c.leads->'statuses'->'ids' ?| array['обработка', 'выкуплено'];

Но это нет (я ничего не вижу):

select * from sms_campaigns as c where c.leads->'niches'->'ids' ?| array['7', '5'];

Как исправить сломанный запрос?
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 2
AshBlade
@AshBlade
Просто хочу быть счастливым
Значит SELECT ничего не вернул - нет таких записей, которые удовлетворяют условию.
Как исправить - добавить записи, у которых есть json у которого поле 'niches'->'ids' имеет значение 7 или 5.
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
Оператор ?| в PostgreSQL выполняет поиск строковых значений в списке элементов массива или ключей (имён атрибутов) объекта:

jsonb ?| text[] → boolean

Do any of the strings in the text array exist as top-level keys or array elements?

'{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'd'] → t

https://www.postgresql.org/docs/current/functions-...

В PostgreSQL нет встроенных функции или оператора для указанной задачи или для проверки на пересечение двух числовых JSON массивов. Возможное решение - разобрать JSON-массив на элементы, собрать в обычный массив и использовать для двух массивов оператор &&
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы