加入右表的索引(不是数据库索引)

时间:2014-04-24 20:57:18

标签: sql postgresql

我有一对多的关系,想要加入正确的表,同时为许多表中的每一行包含一个索引号。

例如:

用户表

id | name
 1 | me
 2 | you

attempted table
user_id | date 
      1 | 2014-03-01
      1 | 2014-03-03
      1 | 2014-03-02
      2 | 2014-02-01

join result
user_name | date       | attempt_number
       me | 2014-03-01 | 0     
       me | 2014-03-02 | 1
       me | 2014-03-03 | 2
      you | 2014-02-01 | 0

1 个答案:

答案 0 :(得分:1)

您可以使用row_number()进行枚举。

select u.name, a.date,
       (row_number() over (partition by u.name order by a.date) - 1) as attempt_number
from user u left outer join
     attempted a
     on a.user_id = u.id;

编辑:

我在这里与join的类型斗争。样本数据中只有一个用户名“me”,但样本输出有两个,“我”和“你”。 attempted表引用了两个用户ID。

我假设相关的表只是针对该问题被截断,并且attempted中的用户ID与user表具有正确的外键关系。因此,此查询使用left outer join,它保留user表中的所有行。它也可以只使用inner join