2011-10-17 28 views
2

我有兩個表 第一個包含有關誰參加課程提供 the first table which is named Staff找到沒有參加教職員表的課程?使用SQL

有關各種講座的第二表信息人員信息,並必須由工作人員採取 second table which named Course

我想quereu SQL來找到每個員工的剩餘路線

例如: -

拉米介紹。 Java

拉米納入。 to Orcad

Rami PIC

Rami介紹。到C++

Rayan簡介。閃存

RAYAN簡介C++

RAYAN PIC

RAYAN介紹。到Photoshop

Rayan進入。到Orcad

。 。 。 。 。 等等全體員工

回答

1

有了這些3個表...

課程:

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

人員:

sname 
Khalid 
Rami 
Rayan 

StaffCourses:

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 
+0

謝謝我的朋友我重建表,因爲你做 和一切都OK :) – user1000068

2

沒測試!但它可能工作:

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

我不認爲這會工作。如果課程沒有人註冊它,它將不會顯示在OP的第一個表中,但在查詢結果集中,每個員工應該有一個記錄。你正在查詢不會處理這種情況correclty。 –

+0

這個SQL給所有工作人員不採取的課程只是 不是每個工作人員和剩餘的課程 感謝回答 – user1000068

+0

是的。這是不正確的。我應該刪除我的答案嗎? – lanan

2

我假設你有一個職員表,每個工作人員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子句它過濾掉已經在你的註冊表中存在的所有組合。

+0

再次喜歡 感謝它DEOS不工作:( 感謝答案 – user1000068

+0

如何在不工作?它是否給出一個錯誤?如果是的話有什麼錯誤? –

+0

我使用Access 2007年 該錯誤表示有錯誤從ITSFiledTraining CROSS JOIN ITSStaffTraining並且它影響JOIN – user1000068

相關問題