如果有多个连接匹配,我如何加入一行?

时间:2014-09-24 22:19:00

标签: sql join

我有2张桌子。我想加入一个为该玩家加入最新日期的方式。从下面的子集中,我希望Adams的连接只能通过绘制加入到行,因为它是最新的日期。如果有多行,我该怎么做呢?

ID    PLAYER
-------------
2     Adams
3     Rogers
4     David


PLAYER_ID    DATE          RESULT
------------------------------------
2            01/01/2014    Win
2            01/02/2014    Win
2            01/03/2014    Loss
2            01/04/2014    Draw

1 个答案:

答案 0 :(得分:1)

我假设player_id和日期是一个独特的组合。日期不是一个好的列名。我假设你的表名是播放器和结果......将来,给我们表名,所以答案可以包括它们而不是我的猜测。

构建查询:

(select player_ID, max(date) from table group by player_ID)

这将选择每个玩家的最长日期。我们将它用作子查询和内部联接,以便它充当过滤器。请注意,如果player_ID,日期组合不是唯一的,则会为每位玩家带回多行。

Select player, maxdate
from player p
inner join (select player_ID, max(date) as maxdate from result group by player_ID) a
on a.player_ID = p.player_ID

这将返回给您一个玩家和最近的日期。将其加入到结果表中以获得结果

Select player, result
from player p
inner join (select player_ID, max(date) as maxdate from result group by player_ID) a
on a.player_ID = p.player_ID
inner join result r on r.player_ID = a.player_ID and r.date = a.maxdate

希望这对于为您创建语句的逻辑是有意义的。