1

我有两个表如下

表格1

column1|column2
----------------
a1     | c1
----------------
a2     | c2

表2

column1|column2|column3
----------------------
1      | a1    | x
-----------------------
2      | a1    | y
-----------------------
3      | a1    | z
-----------------------
4      | a2    | ab
-----------------------
5      | a2    | cd
-----------------------
6      | a2    | ef

Table1 是父表,table2 是子表。

table1 的 Column1 映射到 table2 的 column2。

对于 table1 中 column1 的每个条目,Table2 可以包含多个记录,如下所示。

我想将table1加入table2,但我只想要table2所有条目的第一条记录。

所以我的结果集将是

column1|column2|column3
----------------------
1      | a1    | x
-----------------------
2      | a2    | ab

如何在 oracle 11 g 中进行连接以实现此目的。我使用 sql 导航器 +

4

1 回答 1

1
select
  x.column1,
  x.column2,
  x.column3
from
    (select
      t2.column1,
      t2.column2,
      t2.column3,
      dense_rank() over (partition by t2.column1, t2.column2 order by t2.column3) as rank
    from
      table1 t1
      inner join table2 t2 on t2.column2 = t1.column1) x
where
  x.rank = 1

但是由于您没有使用 t1 中的任何字段,因此您可以省略连接。它可以用于过滤(也可以通过 using 来完成exists,但是由于 t1 是父表,因此 t2 中的所有记录无论如何都应该具有匹配的 t1 记录。

于 2012-11-03T14:22:42.393 回答