匹配并比较两个表中的数据

时间:2017-05-03 06:00:53

标签: sql oracle


我在匹配来自2个不同表格的数据时遇到问题。

table1: a,b,c,d,e (col)
table2: a,d,e,f,g (col)

如何将table1 col a,d,e中的数据与table2 col a,d,e匹配 如果table1中的行与table2中的行匹配,然后停止循环?

在我的脚本中,结果总是在匹配数据时复制(当table1中的数据与其仍未循环的数据匹配时,未与表2中的其他数据锁定)。

select distinct x.a, y.a, x.d, y.d, x.e, y.e
from table1 x,
     table2 y
where x.a = y.a(+) and x.d = y.d(+) and x.e = y.e(+)


数据样本......

表1

col a--b--c--d--e
'Ryan'--'Sofia'--'Bulgaria'--'January'--'107'
'Dony'--'Vienna'--'Austria'--'March'--'103'
'Ryan'--'Berlin'--'Germany'--'January'--'107'
'Dony'--'Milan'--'Italy'--'March'--'103'

表2

col a--d--e--f--g
'Ryan'--'January'--'107'--'Travel'--'5'
'Ryan'--'January'--'107'--'Bussiness'--'4'
'Dony'--'March'--'103'--'Bussiness'--'9'
'Dony'--'March'--'103'--'Bussiness'--'3'



查询

select distinct x.a, y.a, x.d, y.d, x.e, y.e
from table1 x,
     table2 y
where x.a = y.a(+) and x.d = y.d(+) and x.e = y.e(+)


结果
table1 1st_row与table2 1st_row匹配
table1 2nd_row与table2 3rd_row匹配
table1 3rd_row与table2 1st_row匹配(匹配重复)
table1 4th_row与table2 3rd_row匹配(匹配重复)


但所需的结果是
table1 1st_row与table2 1st_row匹配
table1 2nd_row与table2 3rd_row匹配
table1 3rd_row与table2 2nd_row匹配
table1 4th_row与table2 4th_row相匹配

我不明白如何使用程序或案例
请帮助解决这个问题...谢谢

1 个答案:

答案 0 :(得分:0)

组中的行数和连接具有相同编号的行。

select *
  from ( select T1.*, row_number() over(partition by a,d,e order by NULL) num
           from Table1 T1
       ) x
  left join (
         select T2.*, row_number() over(partition by a,d,e order by NULL) num
           from Table2 T2
       ) y
    on x.a = y.a and x.d = y.d and x.e = y.e and x.num=y.num