在没有唯一键的两个表上选择查询

时间:2011-02-09 12:44:50

标签: sql oracle select

我有两张桌子。

表1


col1   col2  col3
100 A 1000 100 A 1000 100 A 1002 100 B 1003 100 C 1004

表2


col1   col2  colC
100 A 1X 100 A 2X 100 A 3X 100 B 4X 100 C 5X

在上表中,colC值是唯一的。

我希望我的ouptput像这样,其中colC值也是唯一的。


col1   col2  col3  colC
100 A 1000 1X 100 A 1000 2X 100 A 1002 3X 100 B 1003 4X 100 C 1004 5X

我必须使用col1和col2作为连接的键。

这可能吗?当我尝试使用内部和左外连接时,我得到了重复的前两个记录。 TIA

2 个答案:

答案 0 :(得分:3)

这样的东西?

select
  a.col1,
  a.col2,
  a.col3,
  b.colC 
from (
  select
    row_number() over (partition by col1, col2 order by 1) r,
    col1,
    col2
  from 
   table1
  ) a,  (
  select
    row_number() over (partition by col1, col2 order by 1) r,
    col1,
    col2
  from 
   table2
  ) b
  where a.r = b.r and
        a.col1 = b.col1 and
        a.col2 = b.col2;

答案 1 :(得分:2)

SELECT t1.col1, t1.col2, t1.col3, t2.colC FROM Table1 t1
JOIN Table2 t2
ON t1.col1 = t2.col1
AND t1.col2 = t2.col2

这不对吗?

编辑:你说你得到重复,但这会发生在你指定为键的2列,实际上不是键。还有其他行具有相同的值。因此,如果组合意味着唯一,则数据存在故障或需要再次查看您的要求。