Возможно ли включить наборы в предложение PostgreSQL IN? - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь написать запрос, который выполняет что-то вроде этого:

SELECT * FROM table WHERE
(a, b) in ((23, [1]), (20, [0]), (17, [-1, 0, 1]), (55, [-1, 0]);

Результирующий набор будет (при условии, что элементы существовали!):

23, 1
20, 0
17, -1 (could have also been 17, 0 or 17,1)
55, -1 (could have also been 55, 0)

То есть, элементы набора похожи на предложения ИЛИ.«Мы настаиваем на том, чтобы (a, b) включали (23, 1) и (20, 0), но 17 может быть либо -1, 0, либо 1».Имеет ли это смысл?

Возможно ли что-то подобное?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Я полагаю, что это может сработать

SELECT *
FROM table
WHERE (a, b) IN (VALUES (23, ARRAY[1]),(20, ARRAY[0]),(17, ARRAY[-1,0,1]),(55, ARRAY[-1, 0]))

ЗНАЧЕНИЯ CLAUSE POSTGRESQL

0 голосов
/ 14 октября 2018

Вы можете использовать = ANY:

WITH cte(i, list) AS (
  VALUES (23, ARRAY[1]),(20, ARRAY[0]),(17, ARRAY[-1,0,1]), (55, ARRAY[-1, 0])
)
SELECT t.*
FROM tab t
JOIN cte c ON t.a = c.i AND t.b = ANY(list);

db <> fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...