2015-02-24 41 views
0

我正在與oracle和下面的工作我有一個基本的SQL查詢,我選擇有一個團隊使用join的學校。然而,我正在努力如何使用連接來選擇相反(沒有團隊的學校)。我嘗試使用outterinnerleftright這兩個字,但無濟於事,我得到了我想要的結果。我如何列出沒有團隊的學校?聯接的使用:獲得oppsite結果

查詢:

SELECT DISTINCT a.school_name, a.school_id, b.school_id FROM School a RIGHT OUTER JOIN Team b ON a.school_id = b.school_id; 

結果:

SCHOOL_NAME    SCHOOL_ID SCHOOL_ID 
------------------------- ---------- ---------- 
Panthers University   92022  92022 
Blue Rays Middle School  22149  22149 

表:

schools 

SCHOOL_ID SCHOOL_NAME     SCHOOL_TYPE 
---------- ----------------------------- ------------ 
    92022 Panthers University   University 
    22149 Blue Rays Middle School  Middle SchooL 
    21719 Bull Dogs High School   High SchooL 
    42736 Saint Lucia Grade School  Middle SchooL 

school_teams 

    TEAM_ID SPORT_ID SCHOOL_ID TEAM_NAME 
---------- ---------- ---------- ---------- 
     1   1  92022 Panthers 
     2   1  22149 Blue Rays 
+0

我看到你的上述結果,你顯示學校有團隊ID。請使用空條件的左連接 – Backtrack 2015-02-24 05:39:32

回答

1

所有這些連接(內部,外部,左側,右側)只選擇匹配的行。你正在尋找不匹配的行,所以它們不適合你。

試試這個:

SELECT DISTINCT school_id, school_name FROM school 
    WHERE school_id not in 
    (SELECT school_id FROM school_teams) 
+1

對於不熟悉SQL的人來說,可能是最容易理解的解決方案,但我認爲人們應該在那裏解決NOT EXISTS解決方案,因爲它處理複合鍵等。 – 2015-02-24 05:55:36

+0

謝謝,@ClintGood。不存在對我來說是新的。它看起來像非空ID,沒有什麼區別 - 但都是一樣的,從現在起我想我會用NOT EXISTS來代替。 – 2015-02-24 14:05:38

2

使用Not exists做到這一點。

SELECT a.school_name, a.school_id 
FROM School a 
where not exists (select 1 from Team b where a.school_id = b.school_id) 
0

嘗試:

SELECT DISTINCT a.school_name, a.school_id, b.school_id FROM School a LEFT OUTER JOIN Team b ON a.school_id = b.school_id; 
+0

這將選擇所有學校 - 有或沒有團隊。 OP希望只有沒有團隊的學校。 – 2015-10-08 13:38:02

0

寫此查詢來生成所需的結果集。使用加入。

SELECT Table1.School_Name, Table1.School_Id FROM Table1 LEFT JOIN Table2 ON Table1.School_Id = Table2.School_Id where Table1.School_Id NOT IN (Select DISTINCT Table2.School_Id From Table2);