SELECT *, где все ячейки integer [] находятся в наборе значений - PullRequest
1 голос
/ 27 октября 2019

Я пытаюсь решить именно это: Как проверить, содержит ли ячейка целочисленного массива типа определенное значение в 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}

Ответы [ 2 ]

3 голосов
/ 27 октября 2019

Используйте оператор <@ - содержится в , например:

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) 
1 голос
/ 27 октября 2019

Я не вижу решения без какого-либо разделения, но вам не нужно повторять некоторые части вашего запроса. Я бы разделил массив, используя unnest():

SELECT m.id
FROM mytable m
WHERE (SELECT bool_and(u.i IN (2, 3, 4)) FROM unnest(m.int_array) u (i))
...