Двойные IN-выражения в SQL

Просто интересно узнать инструкцию IN в SQL. Я знаю, что я могу искать несколько столбцов с одним значением, делая

'val1' IN (col1,col2)

И может искать столбец для нескольких значений

col1 IN ('val1','val2')   

Но есть ли способ сделать оба эти действия одновременно, не останавливаясь на повторении AND/OR в SQl? Я хочу сделать это наиболее масштабируемым способом, поэтому независимо от количества VAL/col, которые мне нужно найти. Итак, по существу:

('val1','val2') IN (col1,col2)

но действителен.

Ответ 1

Вы можете сделать что-то вроде (которое я также добавил на SQLFiddle):

-- Test data:
WITH t(col1, col2) AS (
    SELECT 'val1', 'valX' UNION ALL
    SELECT 'valY', 'valZ'
)
-- Solution:
SELECT *
FROM t
WHERE EXISTS (
    SELECT 1
    -- Join all columns with all values to see if any column matches any value
    FROM (VALUES(t.col1),(t.col2)) t1(col)
    JOIN (VALUES('val1'),('val2')) t2(val)
    ON col = val
)

Конечно, можно утверждать, какая версия более кратка.

Ответ 2

Да, например, вы можете сделать это в Oracle:

select x, y from (select 1 as x, 2 as y from dual)
where (x,y) in (select 1 as p, 2 as q from dual)