Как получить все столбцы таблицы по сочетанию значений двух столбцов?

Как осуществить поиск по таблице по сочетаниям двух столбцов?

С помощью запроса:

select sb.col1, sb.col2 from table1 sb          
minus
select s.col1, s.col2 from table2 s

получаем таблицу из двух столбцов, показывающих уникальные сочетания col1+col2 которые есть в table1 и нет в table2. Все столбцы таблиц отличаются по формату, кроме col1 и col2.

Как осуществить поиск в table1 по этим уникальным сочетаниям?

Т.е. нужно вывести прочие столбцы для записей, которые есть в table1 и нет в table2, где ключевым является сочетание значений столбцов col1+col2.


Ответы (2 шт):

Автор решения: MaxU

Воспользуйтесь CTE:

with tab as (
  select sb.col1, sb.col2 from table1 sb          
  minus
  select s.col1, s.col2 from table2 s
)
select
  * 
from table1 
where (col1, col2) in (select col1, col2 from tab)
;
→ Ссылка
Автор решения: 0xdb

В дополнение к правильному ответу.

Также можно воспользоваться коррелированным запросом:

select t1.* from (
    select col1, col2 from t1          
    minus
    select col1, col2 from t2) t
cross apply (
    select * from t1
    where t1.col1 = t.col1 and t1.col2 = t.col2) t1 

На таких тестовых данных:

with 
t1 (col1, col2, col3) as (
    select 1, 1, 't1-1-1' from dual union all 
    select 1, 2, 't1-1-2' from dual union all 
    select 1, 3, 't1-1-3' from dual),
t2 (col1, col2) as (    
    select 1, 1 from dual union all 
    select 2, 1 from dual)
<здесь запрос> 

Будет получен ожидаемый результат:

      COL1       COL2 COL3  
---------- ---------- ------
         1          3 t1-1-3
         1          2 t1-1-2
→ Ссылка