Выберите, где несколько условий в параллельных списках значений - PullRequest
0 голосов
/ 12 апреля 2020

Скажем, у меня есть два списка значений:

values1 = (1, 2, 3)
values2 = (10, 20, 30)

Можно ли сделать выборку в соответствии с этим:

SELECT 
    id_1, 
    id_2, 
    id_3 
FROM 
    table
WHERE 
    (id_1 IN values1 OR id_2 in values1)
    AND id_3 IN values2

Это должно возвращать результаты только когда один из верно следующее:

(id_1 = 1 OR id_2 = 1) AND id_3 = 10
(id_1 = 2 OR id_2 = 2) AND id_3 = 20
(id_1 = 3 OR id_2 = 3) AND id_3 = 30

, а не:

(id_1 = 1 OR id_2 = 1) AND id_3 = 20

1 Ответ

0 голосов
/ 12 апреля 2020

Вы можете express это использовать таблицу констант и join:

select t.*
from t join
     (values (1, 10), (2, 20), (3, 30)) v(x, y)
     on v.x in (t.id_1, t.id_2) and v.y = t.id_3 ;

Или вы можете упростить фильтрацию, используя in:

(1 IN (id_1, id_2) AND id_3 = 10) OR
(2 IN (id_1, id_2) AND id_3 = 20) OR
(3 IN (id_1, id_2) AND id_3 = 30)
...