Двойные 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)