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

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

我希望quereu SQL为每个员工找到剩余的课程。
例如:
拉米介绍。Java
Rami into.到Orcad
Rami PIC
拉米介绍。转到C++
Rayan Intro闪光灯
c++的Rayan简介
Rayan PIC
Rayan Intro到Photoshop
Rayan Into。到Orcad
。
。
。
。。。。。对于所有员工,依此类推
发布于 2011-10-22 02:58:21
有了这3张表..。
课程:
CourseName
intro. Flash
intro. Java
intro. to Photoshop
into. To Orcad
intro. to c++
PIC员工:
sname
Khalid
Rami
RayanStaffCourses:
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发布于 2011-10-18 07:13:05
没有测试!但它可能会起作用:
SELECT staff.Name, courses.CourseName
FROM courses LEFT JOIN staff
ON (staff.TrainingCourse = courses.CourseName)
WHERE TrainingCourse IS NULL发布于 2011-10-18 07:13:22
我假设您有一个员工表,每个员工有1条记录,还有一个课程表,每个课程有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子句中过滤掉注册表中已经存在的所有组合。
https://stackoverflow.com/questions/7800600
复制相似问题