首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到教员表中的课程?使用SQL

找不到教员表中的课程?使用SQL
EN

Stack Overflow用户
提问于 2011-10-18 06:59:47
回答 3查看 139关注 0票数 2

我有两个表,第一个表包含有关参加课程的员工的信息

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

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

例如:

拉米介绍。Java

Rami into.到Orcad

Rami PIC

拉米介绍。转到C++

Rayan Intro闪光灯

c++的Rayan简介

Rayan PIC

Rayan Intro到Photoshop

Rayan Into。到Orcad

。。。。。对于所有员工,依此类推

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-22 02:58:21

有了这3张表..。

课程:

代码语言:javascript
复制
CourseName
intro. Flash
intro. Java
intro. to Photoshop
into. To Orcad
intro. to c++
PIC

员工:

代码语言:javascript
复制
sname
Khalid
Rami
Rayan

StaffCourses:

代码语言:javascript
复制
sname   Trainingcourse
Khalid  into. To Orcad
Rami    intro. Flash
Rami    intro. to Photoshop
Rayan   intro. Java

..。此查询...

代码语言:javascript
复制
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;

..。生成以下结果集:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2011-10-18 07:13:05

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

代码语言:javascript
复制
SELECT staff.Name, courses.CourseName 
FROM courses LEFT JOIN staff
             ON (staff.TrainingCourse = courses.CourseName)
WHERE TrainingCourse IS NULL
票数 2
EN

Stack Overflow用户

发布于 2011-10-18 07:13:22

我假设您有一个员工表,每个员工有1条记录,还有一个课程表,每个课程有1条记录。在您的文章中的第一个表中,我将调用CourseRegistrations表。

代码语言:javascript
复制
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子句中过滤掉注册表中已经存在的所有组合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7800600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档