Выберите строки в postgres, где поле JSONB в предоставленном списке - PullRequest
0 голосов
/ 19 марта 2020

Скажем, у меня есть таблица в Postgres со столбцом data типа JSONB. Этот столбец содержит довольно сложный объект, например:

{
  ...,
  gender: ['men', 'women'],
  ...
}

У меня есть запрос типа gender=men&gender=women&gender=something_else и я хочу найти все строки в таблице, где ЛЮБОЙ из gender's членов `IN ('men', 'women' , 'что-то другое'). Например:

SELECT uuid, data ->> 'gender' FROM "OX_Articles" WHERE data ->> 'gender' INTERSECTS WITH (men', 'women', 'something_else');

Конечно, у нас нет ключевых слов INTERSECTS WITH.

1 Ответ

0 голосов
/ 19 марта 2020

Либо in (...) или = any(array[...]) должны работать.

Они должны иметь аналогичные характеристики. Я предпочитаю =any, потому что он обрабатывает пустые RHS (тогда как IN не может обрабатывать пустые литеральные кортежи), и я ожидал бы, что любые привязки postgres, которые мне понадобятся для преобразования массивов / списков / массивов основного языка в pg-массивы, а не pg кортежи.

...