Я пытаюсь решить именно это: Как проверить, содержит ли ячейка целочисленного массива типа определенное значение в SQL , но для нескольких значений с обеих сторон
, что-то вродеthis:
SELECT id FROM table WHERE ALL(column_of_type_integer_array) IN (2,3,4)
Есть что-нибудь подобное или мне нужно разделить мои значения?
таблица callenges
id| precoditions ----------------- 1 |[] 2 |[] 3 |[] 4 |[2,3]
Так что я хочу выбирать только те отборы, где задачи предварительного кодирования выполнены.
SELECT id FROM callenges WHERE All(preconditions) IN ${solvedChallenges}
Используйте оператор <@ - содержится в , например:
<@
with my_table(arr) as ( values (array[2,3,4,2,3]), (array[1,2,3,4,2,3]) ) select * from my_table where arr <@ array[2,3,4] arr ------------- {2,3,4,2,3} (1 row)
Я не вижу решения без какого-либо разделения, но вам не нужно повторять некоторые части вашего запроса. Я бы разделил массив, используя unnest():
unnest()
SELECT m.id FROM mytable m WHERE (SELECT bool_and(u.i IN (2, 3, 4)) FROM unnest(m.int_array) u (i))