2012-12-01 25 views
0

下面我有兩個數據庫表:如何編寫查詢以查找不屬於所選字段的記錄?

Course_Module表:

CourseId ModuleId 
1   1 
1   2 
1   3 

模塊表:

ModuleId ModuleNo ModuleName       Credits 
1  CHI2513 Systems Strategy      20 
2  CHI2550 Modern Database Applications   20 
3  CHI2565 Ecommerce - Business and Technology 20 
4  CHT2220 Interactive Systems     20 
5  CHT2520 Advanced Web Programming    20 
6  CHI2554 Patent Law       40 

現在我不知道該怎麼做,但我想要做的就是創建查詢它將輸出一組記錄,其中顯示不在所選課程中的模塊列表。

因此,舉例來說,如果CourseId = 1,則模塊應該從查詢輸出是這些如下:

4  CHT2220 Interactive Systems     20 
5  CHT2520 Advanced Web Programming    20 
6  CHI2554 Patent Law       40 

這是因爲你可以在Course_Module表中看到,這些模塊不屬於選擇CourseId 1

但如何才能像這樣的查詢寫?以下是我創建的一個簡單查詢:

SELECT cm.CourseId, m.ModuleId, m.ModuleNo, m.ModuleName, m.Credits 
FROM Course_Module cm 
INNER JOIN Module m ON cm.ModuleId = m.ModuleId 
WHERE 
(CourseId = 1) 
ORDER BY ModuleNo 

回答

2

以下情況如何?

SELECT 
    m.* 
FROM 
    Module m 
WHERE 
    m.ModuleId NOT IN (
         SELECT cm.ModuleId 
          FROM Course_Module cm 
         WHERE cm.CourseId = 1 
        ); 
+0

測試了它在phpMyAdmin和它美麗的工作。謝謝:) – Manixman

+0

@Manixman不客氣:) –

+0

我能問你一個問題,當我用'$ mysqli-> bind_result()'是我想以包括NOT IN()的SELECT?換句話說它應該是'$ sessionqrystmt-> bind_result($ dbModuleId,$ dbModuleNo,$ dbModuleName,$ dbCredits);'還是應'$ sessionqrystmt-> bind_result($ dbModuleId,$ dbModuleNo,$ dbModuleName,$ dbCredits, $ dbCourseModuleId);'? – Manixman

0

我想這可能工作:

SELECT 
    Module.* 
FROM 
    Module 
WHERE 
    ModuleId NOT IN (SELECT ModuleId FROM CourseId WHERE CourseId = 1) 
相關問題