我有一对多的关系,想要加入正确的表,同时为许多表中的每一行包含一个索引号。
例如:
用户表
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
答案 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
。