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

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

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

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

例如:-

拉米介绍。爪哇

拉米成。去奥卡德

拉米图片

拉米介绍。到 C++

Rayan 简介。闪光

Rayan C++ 简介

拉扬图片

Rayan 简介。到 Photoshop

Rayan 进入。到奥卡德

.

.

.

。 . . . . 等等所有员工

【问题讨论】:

    标签: mysql sql ms-access ms-access-2007


    【解决方案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
    

    【讨论】:

    • 感谢我的朋友,我按照你的方式重建了表格,一切都很好:)
    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 2020-11-28
    • 2021-02-12
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多