修改有关绑定值或相等值的现有信息

时间:2012-09-12 15:32:06

标签: sql

我正在尝试使用奥林匹克数据库,我的任务是修改我所知道的关于在同一事件中并列的奥运选手的信息。

  

“首先,扩展查询以显示有关该事件的更多详细信息:in   事件ID的位置,显示事件 - 性别,距离和风格。   作为其中的一部分,输出现在按事件性别排序,   距离,风格。然后放置。

     

其次,展示两个竞争对手中的每一个的更多细节:in   每个竞争者编号的位置,显示他们的给定和姓氏   和他们国家的名字(不是国家代码)。“


我必须使用的四个表是:

竞争对手,包含:CompetitornNum,Givenname,Familyname。

结果,其中包含:Eventid,CompetitorNum,Place。

事件,包含:Eventid,Eventgender,Distance,Style

国家/地区,其中包含:国家/地区名称

Is my original query.

SELECT C1.EventID, C1.Place, C1.CompetitorNum, C2.CompetitorNum
FROM Results C1, Results C2
WHERE C1.Place = C2.Place
    and C1.EventID = C2.EventId
    and C1.CompetitorNum < C2.CompetitorNum
ORDER BY C1.EventID;

我的问题是我有一个关于我需要做什么的概念,但我们被告知每次尝试时都会使用崩溃的程序,我真的不知道从哪里开始。

SELECT Eventgender, Distance, Style, C1.Place, Givenname, Familyname, Countryname,     Givenname, Familyname, Countryname
FROM Results C1, Results C2
    natural join Competitors
    natural join Countries
    natural join Events
WHERE C1.Place = C2.Place
    and C1.EventId = C2.EventId
    and C1.CompetitorNum < C2.CompetitorNum
ORDER BY C1.EventID;

我希望选择人1的名字,姓氏和国家名称,以及人2,而不是我正在检索的CompetitorNum。

我的新查询找到第一个人,但我不知道如何更改以获取秒人信息。

非常感谢任何帮助


我似乎找到了解决方案,但是我不确定我是否使用最好的方法来完成任务。有没有更好的方法呢?

SELECT C5.Eventgender, C5.Distance, C5.Style, C1.Place, C3.Givenname, 
C3.Familyname, C6.Countryname, C4.Givenname, C4.Familyname, C7.Countryname
FROM Results C1
    join Results C2 on C1.Place = C2.Place and C1.EventId = C2.Eventid 
        and C1.Competitornum < C2.Competitornum
    join Competitors C3 on C3.Competitornum = C1.Competitornum
    join Competitors C4 on C4.Competitornum = C2.Competitornum
    join Events C5 on C5.Eventid = C1.Eventid
    join Countries C6 on C6.Countrycode = C3.Countrycode
    join Countries C7 on C7.Countrycode = C4.Countrycode
ORDER BY C1.EventId;

1 个答案:

答案 0 :(得分:0)

SELECT C5.Eventgender, C5.Distance, C5.Style, C1.Place, C3.Givenname, 
C3.Familyname, C6.Countryname, C4.Givenname, C4.Familyname, C7.Countryname
FROM Results C1
    INNER JOIN Results C2 on C1.Place = C2.Place and C1.EventId = C2.Eventid 
        and C1.Competitornum < C2.Competitornum
    INNER JOIN Competitors C3 on C3.Competitornum = C1.Competitornum
    INNER JOIN Competitors C4 on C4.Competitornum = C2.Competitornum
    INNER JOIN Events C5 on C5.Eventid = C1.Eventid
    INNER JOIN Countries C6 on C6.Countrycode = C3.Countrycode
    INNER JOIN Countries C7 on C7.Countrycode = C4.Countrycode
ORDER BY C1.EventId;