【问题标题】:Attempting to create a query that will return all records has me stumped试图创建一个返回所有记录的查询让我很难过
【发布时间】:2011-04-13 01:26:13
【问题描述】:

我有一个包含三个表的数据库。 “名册”、“培训课程”和“课程注册” 名册和课程注册通过“ETID”(员工培训 ID)连接。课程注册和培训课程通过“课程ID”连接。
我正在尝试创建一个查询,该查询将返回所有员工,以及所有课程的 YES/NO 值。 我写了以下内容来查看特定员工,但我似乎无法找到返回所有员工的正确方法。任何帮助将不胜感激。

SELECT [TRAINING COURSES].[course id]
     , [TRAINING COURSES].[course name]
     , "YES" AS Completed
     , [COURSE ENROLLMENT].[training date]
FROM [TRAINING COURSES] 
INNER JOIN [COURSE ENROLLMENT]
            ON [COURSE ENROLLMENT].[course id]=[TRAINING COURSES].[course id]
WHERE [COURSE ENROLLMENT].[ETID]=[ENTER ETID]

UNION ALL 

SELECT [TRAINING COURSES].[course id]
     , [TRAINING COURSES].[course name]
     , "No" AS Completed
     , NULL
FROM [TRAINING COURSES]
WHERE NOT EXISTS 
(
    SELECT *
    FROM [COURSE ENROLLMENT]
    WHERE [COURSE ENROLLMENT].[course id]=[TRAINING COURSES].[course id] 
    AND [COURSE ENROLLMENT].[ETID]=[ENTER ETID:]
)
ORDER BY [TRAINING COURSES].[course name];

【问题讨论】:

  • 请注意:如果您使用 Pascal 大小写:CourseEnrollment 而不是 [COURSE ENROLLMENT],您的查询将更容易阅读和编写。您可能更喜欢下划线 (Course_Enrollment),但坦率地说,任何事情都比将每个表格和每个字段都括起来要好。
  • Access 最大的弊端之一是,恕我直言,它允许在对象名称中使用空格。而且我不是一个反身的 Access-basher....
  • 我是一名全职的 Access 开发人员,自从我使用它的最初几年,我就没有在对象名称中使用空格。很短的时间后,很明显那里没有实用程序。许多人将对象名称与表示级别名称混淆,其中大部分都可以在您的对象定义中定义(例如表中字段的标题属性)。

标签: sql ms-access


【解决方案1】:

您不需要在此查询中使用 Union。将 INNER JOIN 替换为 LEFT OUTER JOIN,它将完成与您的查询相同的操作,但性能会更好。

SELECT [Training Courses].[Course Id], [Training Courses].[Course Name], 
        IIF(IsNull([Course Enrollment].[ETID]), "NO", "YES") as Completed,
        [Course Enrollment].[Training Date]
FROM    [Training Courses]
        LEFT OUTER JOIN [Course Enrollment]
            ON [Training Courses].[Course Id] = [Course Enrollment].[Course Id] 
ORDER BY [Training Courses].[Course Name]

如果您想要所有员工和所有课程,则需要在名册和培训课程表之间进行交叉联接。然后,您将与课程注册表进行左连接以获得上面的 yes no。

【讨论】:

    【解决方案2】:

    从两个子查询中删除WHERE [COURSE ENROLLMENT].[ETID]=[ENTER ETID]

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 2011-03-28
      相关资源
      最近更新 更多