我正在开发一个体育应用程序,允许用户在2个团队之间进行视图固定。 灯具类具有以下属性:
public Fixture(int id, int tournamentId,
String gender, String section,
String team1, String team2,
String date, String time, String venue, String court)
数据是从在线数据库中提取的,但我在使用SQL查询时遇到了一些问题。我使用的两个表是
锦标赛日志(锦标赛中有关球队的信息) 有以下专栏:
Id(PK),TournamentId(FK),团队,性别,部分
TournamentFixtures (关于不同灯具的信息) 有以下专栏:
Id(PK),TournamentId(FK),日期,时间,球场,场地,TeamA_ID(FK - TournamentLogs.Id),TeamB_ID(FK - TournamentLogs.Id)
这两个表都包含一些其他信息,这些信息对于我在这里尝试做的事情并不是必需的。获取大部分信息很简单,因为我将tournamentId作为参数传递给查询,但是当我尝试在查询中获取团队A和B的团队名称时,我的问题就出现了。目前,我尝试将它们设置为变量,并使用TeamA_ID/TeamB_ID
中的TournamentFixtures
值检索它们。显然我没有做到这一点,所以任何帮助都会受到赞赏。
这是我到目前为止所拥有的 -
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的新手,所以这可能是正确的方法。任何帮助将不胜感激。
答案 0 :(得分: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
因为您要连接两次到同一个表,所以需要使用表别名。无论如何,这些都是一个好主意,因为它们使查询更容易编写和阅读。
通过分配变量,我不知道你的意思。对你的逻辑来说,这似乎是不必要的。