SQL从主表中获取行号

时间:2015-02-20 03:13:04

标签: sql oracle

使用SQL,当我合并两个表(Master-table和Table-2)时,如何从Master表中获取数据的实际行号。请参见下图:

表-1(主表)

    Name       Age
   ---------- ------     
1   Ruth     | 45
2   Jennifer | 52
3   Isabel   | 29
4   Jo       | 59
5   Dan      | 35
6   Lem      | 26

表2

    Name       Color
   ---------- ------       
1   Ruth     | Blue
2   Jennifer | Blue
3   Isabel   | Red
4   Jo       | Blue
5   Dan      | Red
6   Lem      | Blue

我想得到的结果:(1)获取颜色为蓝色的记录,(2)新列(表-1中的Row_Number):

    Name       Age    Color    Row_Number
   ---------- ------ -------- ------------
1   Ruth     | 45   | Blue   | 1
2   Jennifer | 52   | Blue   | 2
3   Jo       | 59   | Blue   | 4
4   Lem      | 26   | Blue   | 6

2 个答案:

答案 0 :(得分:0)

这可以解决您的问题:

with all_users as 
(
   select *, row_number over(order by name/*order by whatever you want*/) as seq
   from table1
) select *, all_users.seq
  from table2
  join all_users using(name);

您也可以使用子查询,但在使用Oracle时我更喜欢with

答案 1 :(得分:0)

使用row_nummber(),但您需要指定排序条件

select t.name,t.age,tbl.color,tbl.rn as rownumber 
from table2 t
join (select name,color,row_nummber() over (order by name) as rn from table1) tbl
on t.name=tbl.name

编辑:如果您没有任何排序条件(如评论中所述),那么您只需使用rownum而无需指定排序条件:

select t.name,t.age,tbl.color,tbl.rn as rownumber 
from table2 t
join (select name,color,rownum as rn from table1) tbl
on t.name=tbl.name