如何以线性方式将IN子句中的值列表与另一个IN子句匹配

时间:2018-11-11 06:05:21

标签: sql oracle

--Table_1

col1    col2
............
123     abc
456     def
123     def


select * from Table_1 where col1 in (123,456) and col2 in (abc,def);

我希望输出匹配仅包含来自“ col1”的“ 123”和来自“ col2”的“ abc”的行,而不匹配来自col1的“ 123”和来自“ col2”的“ def”的行。 IN子句中的列表应以线性方式相应地匹配。

select * from Table_1 where col1 in (123,456) and col2 in (abc,def);

O / P

col1   col2
123    abc
456    def

2 个答案:

答案 0 :(得分:3)

您可以使用元组来比较多个列的组合。

select *
from Table_1
where (col1,col2) in ( (123,'abc'),(456,'def'), (789,'abc') );

Demo

答案 1 :(得分:1)

您可以尝试使用row_number窗口函数来制作它。

SELECT col1,col2
from (
    select col1,col2,row_number() over(partition by col1 order by col2) rn
    from Table_1 
    where col1 in (123,456) and col2 in ('abc','def')
) t1
where rn = 1

sqlfiddle