172 похожих чатов

Есть следующий фильтр: oc.regions ?| ARRAY(SELECT DISTINCT region FROM table WHERE

id IN :ids)
Смысл такой, проверить, содерижтся ли в ячейке oc.regions (тип jsonb, внутри массив text[]) хотя бы один регион из подзапроса.

Чем можно заменить оператор ?| ?

7 ответов

7 просмотров

Хмм... а зачем его чем-то заменять?

Roman-Andreev Автор вопроса
Yaroslav Schekin
Хмм... а зачем его чем-то заменять?

ORM по своему интерпритирует знак ? :)

Roman Andreev
ORM по своему интерпритирует знак ? :)

Ну и ну. ;( А escaping / quoting там нет? А так — можно завернуть его в функцию, например. Или заменить на jsonpath, как тут недавно показывал Nikita Glukhov (https://t.me/pgsql/479095). Примерно так: oc.regions ?| ARRAY(...) → jsonb_path_exists(oc.regions, '$[*] ? (@ == $ids[*])', jsonb_build_object('ids', ARRAY(...))

Roman-Andreev Автор вопроса
Yaroslav Schekin
Ну и ну. ;( А escaping / quoting там нет? А так —...

Спасибо! Я немного поковырял и пришел к вот такому решению: oc.regions <@ (SELECT jsonb_agg(DISTINCT region) FROM table WHERE id IN (:ids))

Но это же не то же самое — тут включение, а у Вас было пересечение, вроде... нет?

Roman-Andreev Автор вопроса
Yaroslav Schekin
Но это же не то же самое — тут включение, а у Вас ...

да, но мне кажется мой фильтр работает корректно т.е. если в хоть один из элементов левой части содержится в правой, то фильтр срабатывает возможно я невижу ошибку и вы можете подсказать кейс в котором это не сработает?

Roman Andreev
да, но мне кажется мой фильтр работает корректно т...

Например: SELECT '["a", "b"]' <@ '["a", "c", "d"]'::jsonb, '["a", "b"]'::jsonb ?| ARRAY['a', 'c', 'd']; Вы же вроде подобный код показывали?

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

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Карта сайта