找到不在教职员工表中的课程?使用 SQL

Posted

技术标签:

【中文标题】找到不在教职员工表中的课程?使用 SQL【英文标题】:finding the courses not taking in Staff table ? using SQL 【发布时间】:2011-10-17 22:59:46 【问题描述】:

我有两张桌子 第一个包含有关参加课程的员工的信息

关于所有可用课程的第二个表格信息,并且必须由员工参加

我希望 quereu SQL 为每个员工找到剩余的课程

例如:-

拉米介绍。爪哇

拉米成。去奥卡德

拉米图片

拉米介绍。到 C++

Rayan 简介。闪光

Rayan C++ 简介

拉扬图片

Rayan 简介。到 Photoshop

Rayan 进入。到奥卡德

.

.

.

。 . . . . 等等所有员工

【问题讨论】:

【参考方案1】:

没有测试!但它可能会起作用:

SELECT staff.Name, courses.CourseName 
FROM courses LEFT JOIN staff
             ON (staff.TrainingCourse = courses.CourseName)
WHERE TrainingCourse IS NULL

【讨论】:

我认为这行不通。如果一门课程没有人注册,但它不会出现在 OP 的第一个表中,但在查询结果集中,每个员工都应该有一条记录。您的查询将无法正确处理这种情况。 这个 sql 给出了不是所有员工都参加过的课程,只是不是每个员工和剩余的课程谢谢你的回答【参考方案2】:

我假设您有一个 Staff 表,每个员工有 1 条记录,还有一个 courses 表,每门课程有 1 条记录。我将您帖子中的第一个表称为 CourseRegistrations 表。

SELECT Staff.Name, Courses.CourseName 
FROM Courses CROSS JOIN Staff
WHERE NOT EXISTS (SELECT * 
                  FROM CourseRegistrations 
                  WHERE Name = Staff.Name 
                  AND TrainingCourseName = Courses.CourseName)

如果您不熟悉 CROSS JOIN,它的作用是查找人员和课程的所有可能组合,然后在 WHERE 子句中过滤掉您的注册表中已经存在的所有组合。

【讨论】:

我使用 ACCESS 2007 的错误是 ITSFiledTraining CROSS JOIN ITSStaffTraining 有错误,它会影响 JOIN 不确定访问是否支持交叉连接。尝试将 from 更改为:FROM Courses, Staff WHERE NOT EXISTS ... 如果您未指定任何联接,则默认应为交叉联接(笛卡尔积)【参考方案3】:

有了这3张桌子...

课程:

CourseName
intro. Flash
intro. Java
intro. to Photoshop
into. To Orcad
intro. to c++
PIC

员工:

sname
Khalid
Rami
Rayan

员工课程:

sname   Trainingcourse
Khalid  into. To Orcad
Rami    intro. Flash
Rami    intro. to Photoshop
Rayan   intro. Java

...这个查询...

SELECT
    xjoin.sname,
    xjoin.CourseName
FROM
    [
        SELECT Courses.CourseName, Staff.sname FROM Courses, Staff
    ]. AS xjoin
    LEFT JOIN StaffCourses
    ON
            (xjoin.CourseName = StaffCourses.Trainingcourse)
        AND (xjoin.sname = StaffCourses.sname)
WHERE
    (((StaffCourses.Trainingcourse) Is Null))
ORDER BY
    xjoin.sname,
    xjoin.CourseName;

...产生这个结果集:

sname  CourseName
Khalid intro. Flash
Khalid intro. Java
Khalid intro. to c++
Khalid intro. to Photoshop
Khalid PIC
Rami   into. To Orcad
Rami   intro. Java
Rami   intro. to c++
Rami   PIC
Rayan  into. To Orcad
Rayan  intro. Flash
Rayan  intro. to c++
Rayan  intro. to Photoshop
Rayan  PIC

【讨论】:

感谢我的朋友,我按照你的方式重建了表格,一切都很好:)

以上是关于找到不在教职员工表中的课程?使用 SQL的主要内容,如果未能解决你的问题,请参考以下文章

SQL中主键和外键的定义是啥???

学生课程分数的Spark SQL分析

08 学生课程分数的Spark SQL分析

Oracle 触发器检查一个表中的课程持续时间,如果课程是特定日期,则阻止更新

MySQL学习——SQL查询语句(连接查询&子查询)

SQL查询以查找ID不在另一个表中的记录