2015-08-08 99 views
0

我正在开发一个允许用户使用2个团队之间的视图夹具的体育应用程序。 的灯具类采取以下属性:SQL - 将变量设置为另一个表中的列的值

public Fixture(int id, int tournamentId, 
       String gender, String section, 
       String team1, String team2, 
       String date, String time, String venue, String court) 

得到的数据从在线数据库中抽取,但​​我有一些麻烦的SQL查询。我使用的是两个表

  1. TournamentLogs(约在比赛队伍的信息) 有以下栏目:

    ID(PK),TournamentId(FK),团队,性别,科

  2. TournamentFixtures(在不同的灯具资讯) 有以下栏目:

    ID(PK),TournamentId(FK),日期,时间,法院,地点,TeamA_ID(FK - TournamentLogs.Id),TeamB_ID(FK - TournamentLogs.Id)

两个表都包含其他一些信息,其这不是我在这里要做的事情所必需的。获取大部分信息很容易,因为我通过tournamentId作为查询的参数传递,但是当我尝试在查询中获取团队A和B的团队名称时,我的问题就出现了。目前我尝试将它们设置为变量,并使用TournamentFixturesTeamA_ID/TeamB_ID值检索它们。很明显,我没有这样做,所以任何帮助,将不胜感激。

这里是我有这么远

SELECT TournamentFixtures.Id, 
     TournamentFixtures.TournamentId, 
     TournamentFixtures.Date, 
     TournamentFixtures.Time, 
     TournamentFixtures.Venue, 
     TournamentFixtures.Court, 

     TournamentLogs.Section, 
     TournamentLogs.Gender,  
     SET @TeamA = (SELECT TournamentLogs.Team from TournamentLogs where TournamentLogs.Id = TournamentFixtures.TeamA_ID) 
     SET @TeamB = (SELECT TournamentLogs.Team from TournamentLogs where TournamentLogs.Id = TournamentFixtures.TeamB_ID) 

FROM TournamentFixtures 
Where TournamentFixtures.TournamentId = '1' //will pass this parameter through as required 

我是新手SQL所以这可能是在正确的轨道的方式。任何帮助,将不胜感激。

+2

请用你正在使用的数据库标记你的问题。 –

回答

1

如果我理解正确,您希望使用两个连接来引入您正在查找的信息。您的查询将失败,语法错误,因为TournamentLogs不是FROM子句中:

SELECT tf.Id, tf.TournamentId, tf.Date, tf.Time, tf.Venue, tf.Court, 
     tla.Section, tla.Gender, tla.Team as TeamA, tlb.Team as TeamB 
FROM TournamentFixtures tf LEFT JOIN 
    TournamentLogs tla 
    ON tla.id = tf.TeamA_ID LEFT JOIN 
    TournamentLogs tlb 
    ON tlb.id = tf.TeamB_ID 
Where tf.TournamentId = '1' //will pass this parameter through as required 

因为你是同一个表两次加盟,你需要使用表的别名。无论如何,这是一个好主意,因为它们使查询更容易编写和阅读。

我不知道你的意思是通过分配变量。这对您的逻辑似乎没有必要。

+0

这个作品完美!虽然你可能只是编辑你的答案,但是你的选择中的第二列是我怀疑的错字:-) –

+0

@CodeVader。 。 。谢谢。 –

相关问题