Access Query中的日期搜索未显示结果

时间:2018-02-05 11:34:51

标签: sql ms-access

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。

Data from Fixtures Table

Data from Team Table

2 个答案:

答案 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#

修改:

  • 如果字段来自哪个表没有歧义,则无需在SELECT子句中列出表名。
  • 使用括号访问顶部。例如。 SQL中的(tblFixtures.FixtureDate)