Как сопоставить список значений в предложении IN с другим предложением IN линейным способом - PullRequest
0 голосов
/ 11 ноября 2018
--Table_1

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


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

Я хочу, чтобы вывод соответствовал строке, содержащей только '123' из 'col1' и 'abc' из 'col2', а не '123' из col1 и 'def' из 'col2'. Список в предложении 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 голосов
/ 11 ноября 2018

Вы можете использовать кортежи для сравнения комбинации нескольких столбцов.

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

Демо

0 голосов
/ 11 ноября 2018

Вы можете попробовать использовать 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

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