2012-03-25 63 views
0

假设我有如何在以下数据库模式中显示获胜者?

+----------+--------+-----------+ 
| RACE_ID | NAME | POSITION | 
+----------+--------+-----------+ 

随着主键

+----------+--------+ 
| RACE_ID | NAME | 
+----------+--------+ 

对于给定的竞争对手,我想显示的名称加上比赛的优胜者。对于给定的RACE_ID,获胜者是POSITION = 1的人。所以像下面的东西

SELECT NAME, (???) AS WINNER where NAME='Thorpe' 

我不知道怎么回事???。我正在使用Postgres。

+0

条件'其中name ='Thorpe'没有意义,因为假设你已经知道谁是赢家。 – 2012-03-25 11:24:50

+0

@a_horse_with_no_name - 我认为OP正在寻找任何“索普”跑过的比赛,并希望看到该比赛的胜利者。 – 2012-03-25 12:30:54

+0

@CapeCodGunny:关于这个问题的有趣观点。让我们等待Hoa更清楚地说明 – 2012-03-25 12:40:31

回答

4

假设表名是选手,我想尝试这样的事情如下:

SELECT con.NAME, win.NAME AS WINNER 
    from contestant con 
    join contestant win 
    on win.race_id = con.race_id 
    and win.position = 1 
where con.NAME='Thorpe' 
0

我不认为你的例子是明确的。

我认为RaceID对应于种族,名称是竞争者的名称,位置是他们对该种族的结果(这样主键有意义,这意味着每个名字只能在同一个种族中一次)。

假设我说的是正确的,你几乎已经得到了答案中的所有组件。您还没有提到什么表被调用,但它应该去的东西有点像这样:

SELECT Name AS Winner 
FROM table1 
WHERE Position = 1 
AND RaceID = ?? 

(正如你说你你想它对于给定的RaceID)

1
SELECT R1.NAME AS WINNER 
FROM RaceTable AS R1 
    INNER JOIN RaceTable AS R2 ON R1.RACE_ID = R2.RACE_ID 
WHERE R2.NAME = 'Thorpe' AND R1.Position = 1 
相关问题