Объединение 2 таблиц для сравнения значений - PullRequest
0 голосов
/ 30 мая 2020
• 1000 A1-B1-C2;A1-B2-C1. Но я не хочу, чтобы он когда-либо появлялся во второй форме. Может ли кто-нибудь предложить любой запрос, который поможет мне в этом. Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 30 мая 2020

Вы можете сделать это с помощью функции окна ROW_NUMBER():

select t1.col1, t1.col2, t2.col2
from (
  select t.*, row_number() over (partition by col1 order by col2) rn 
  from table1 t
) t1 inner join  (
  select t.*, row_number() over (partition by col1 order by col2) rn 
  from table2 t
) t2 on t2.col1 = t1.col1 and t2.rn = t1.rn 

См. Демонстрацию . Результатов:

> COL1 | COL2 | COL2
> :--- | :--- | :---
> A1   | B1   | C1  
> A1   | B2   | C2  
0 голосов
/ 30 мая 2020

Еще один вариант - использовать функцию RANK windows следующим образом:

SELECT T1C1, T1C2, T2C2 FROM 
(SELECT T1.COL1 T1C1, T1.COL2 T1C2, T2.COL1 T2C1, T2.COL2 T2C2, 
       RANK() OVER (PARTITION BY T1.COL1 ORDER BY T1.COL2) AS T1RN,  
       RANK() OVER (PARTITION BY T1.COL1 ORDER BY T2.COL2) AS T2RN
FROM TABLE1 T1 JOIN TABLE2 T2 ON T1.COL1 = T2.COL1)
WHERE T1RN = T2RN;
0 голосов
/ 30 мая 2020

Наиболее очевидное соединение находится в столбце col1, который возвращает 4 строки:

SQL> with
  2  t1 (col1, col2) as
  3    (select 'A1', 'B1' from dual union all
  4     select 'A1', 'B2' from dual
  5    ),
  6  t2 (col1, col2) as
  7    (select 'A1', 'C1' from dual union all
  8     select 'A1', 'C2' from dual
  9    )
 10  select a.col1, a.col2 a_col2, b.col2 b_col2
 11  from t1 a join t2 b on a.col1 = b.col1
 12  order by a.col1, a.col2, b.col2;

COL1    A_COL2  B_COL2
------- ------- -------
A1      B1      C1
A1      B1      C2
A1      B2      C1
A1      B2      C2

SQL>

Это все комбинации, которые вы назвали, так что - как сделать вы «иногда» получаете только два из них, а «иногда» еще два? Что не так с еще двумя результатами (как вы сказали, вы не хотите, чтобы они отображались вообще)?

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