найти курсы, не принимая в таблице персонала? используя SQL - PullRequest
2 голосов
/ 18 октября 2011

у меня две таблицы Первый содержит информацию о сотрудниках, которые проходят курсы the first table which is named  Staff

Во второй таблице информация обо всех доступных курсах и должна приниматься персоналом second table which named Course

Я хочу, чтобы quereu SQL нашел оставшийся курс для каждого сотрудника

например: -

Рами интро. Java

Рами в. Оркаду

Rami PIC

Рами интро. на C ++

Rayan Intro. Вспышка

Rayan Intro для c ++

Райан ПИК

Rayan Intro. в фотошоп

Райан Инто. Оркаду

.

.

.

. , , , , и так далее для всего персонала

Ответы [ 3 ]

2 голосов
/ 18 октября 2011

Я предполагаю, что у вас есть таблица персонала с 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 отфильтровывает все комбинации, которые уже существуют в вашей регистрационной таблице.

2 голосов
/ 18 октября 2011

Не тестировал! Но это может сработать:

SELECT staff.Name, courses.CourseName 
FROM courses LEFT JOIN staff
             ON (staff.TrainingCourse = courses.CourseName)
WHERE TrainingCourse IS NULL
1 голос
/ 21 октября 2011

С этими 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
...