SELECT tblTeam.TeamName, tblFixtures.FixtureDate
FROM tblTeam
INNER JOIN tblFixtures
ON (tblTeam.TeamID = tblFixtures.Team2)
AND (tblTeam.TeamID = tblFixtures.Team1)
WHERE (((tblFixtures.FixtureDate) Between #1/1/2018# And #3/1/2018#));
嗨,我正在尝试对我的数据库进行此查询,但它似乎没有显示任何结果。我在设计视图中尝试了访问,但此查询似乎不起作用,根本没有显示任何结果。
我只是在夹具表上创建的一个小型数据库,有Team1和Team2,夹具的日期,Team1和Team2是团队表中的FK。
答案 0 :(得分:2)
您现在加入
ON (tblTeam.TeamID = tblFixtures.Team2)
AND (tblTeam.TeamID = tblFixtures.Team1)
期望Fixtures中的Team1和Team2 的 相同的团队。
因为这永远不会成立,所以你没有行。
如果您尝试在tblTeam中查找每个团队的信息,则需要使用两个联接。
如:
FROM (tblFixtures AS tf
INNER JOIN tblTeams as tm1 on tf.Team1 = tm1.TeamId)
INNER JOIN tblTeams as tm2 on tf.Team2 = tm2.TeamId
注意不同的“tm1”和“tm2” - 这就是清楚地理解同一张桌子的两个副本的方法。
当您使用tblTeams中的值时,请务必使用这些前缀来讨论正确的团队。一旦将它们放入FROM中,访问非常适合提醒您。
将整个查询放在一起,然后,看起来像:
SELECT tm1.TeamName, tm2.TeamName, tf.FixtureDate
FROM
(tblFixtures as tf
INNER JOIN tblTeams AS tm1 ON tf.Team1 = tm1.TeamId)
INNER JOIN tblTeams tm2 ON tf.Team2 = tm2.TeamId
WHERE (((tf.FixtureDate) Between #1/1/2018# And #3/1/2018#));
答案 1 :(得分:1)
取决于您之后的内容(图像在此处被屏蔽)。
你基本上需要两个球队名单 - 主队和客队 要返回一个列表(可能)镜像您的灯具列表但使用团队名称而不是您使用的标识符:
SELECT T1.TeamName
,T2.TeamName
,FixtureDate
FROM (tblFixtures INNER JOIN tblTeam T1 ON tblFixtures.Team1 = T1.TeamID)
INNER JOIN tblTeam T2 ON tblFixtures.Team2 = T2.TeamID
另一种可能性是你只需要一个团队列表和他们正在玩的任何日期。您需要union
查询同时提取Home&将团队分成一个领域:
SELECT TeamName, FixtureDate
FROM tblFixtures INNER JOIN tblTeam ON tblFixtures.Team1 = tblTeam.TeamID
WHERE FixtureDate BETWEEN #01/01/2018# AND #03/01/2018#
UNION SELECT TeamName, FixtureDate
FROM tblFixtures INNER JOIN tblTeam ON tblFixtures.Team2 = tblTeam.TeamID
WHERE FixtureDate BETWEEN #01/01/2018# AND #03/01/2018#
修改:
(tblFixtures.FixtureDate)
。