2012-11-12 114 views
0

我掙扎着,也許是有史以來最簡單的問題。我的SQL知識幾乎限制了我實現這一點。我正在嘗試構建一個應該顯示JobTitle,Note和NoteType的sql查詢。這是事情,第一份工作沒有任何說明,但我們應該在結果中看到它。系統筆記永遠不會顯示。預期的結果應該是這樣的SQL加入兩張表

結果:

-------------------------------------------- 
|ID  |Title  |Note  |NoteType | 
-------------------------------------------- 
|1  |FirstJob |NULL  |NULL  | 
|2  |SecondJob |CustomNot1|1   | 
|2  |SecondJob |CustomNot2|1   | 
|3  |ThirdJob |NULL  |NULL  | 
-------------------------------------------- 

My query (doesn't work, doesn't display third job) 

SELECT J.ID, J.Title, N.Note, N.NoteType 
FROM JOB J 
LEFT OUTER JOIN NOTE N ON N.JobId = J.ID 
WHERE N.NoteType IS NULL OR N.NoteType = 1 

我的表:

My JOB Table 
---------------------- 
|ID  |Title  | 
---------------------- 
|1  |FirstJob | 
|2  |SecondJob | 
|3  |ThirdJob | 
---------------------- 


My NOTE Table 
-------------------------------------------- 
|ID  |JobId  |Note  |NoteType | 
-------------------------------------------- 
|1  |2   |CustomNot1|1   | 
|2  |2   |CustomNot2|1   | 
|3  |2   |SystemNot1|2   | 
|4  |2   |SystemNot3|2   | 
|5  |3   |SystemNot1|2   | 
-------------------------------------------- 

回答

1

這不可能是真的在一起(NoteType不能爲NULL,以及1個在同一時間):

 WHERE N.NoteType IS NULL AND N.NoteType = 1 

您可能要使用OR而不是檢查是否NoteType是NULL或1

 WHERE N.NoteType IS NULL OR N.NoteType = 1 

編輯:隨着修正查詢,你的第三個作業將不爲JOB_ID是匹配檢索但其行得到過濾的,因爲那裏的條件了。

請嘗試以下方式以解決第三個作業中出現空值的問題。

SELECT J.ID, J.Title, N.Note, N.NoteType 
FROM JOB J 
LEFT OUTER JOIN 
(SELECT JOBID NOTE, NOTETYPE FROM NOTE 
    WHERE N.NoteType IS NULL OR N.NoteType = 1) N 
ON N.JobId = J.ID 
+0

對不起,我複製時犯了錯誤。我知道它應該是或者但仍然有問題。 –

+0

@MehmetBudak:什麼問題?是否一樣(第三份工作沒有被選中)和第一份工作是否來臨? –

+0

是的,我希望看到第三份工作。 –

1

只是排除systemNotes並使用子選擇:

select * from job j 
left outer join (
    select * from note where notetype!=2 
) n 
on j.id=n.jobid; 

如果包括連接表到那裏,然後左外連接可能工作作爲內部連接。

+0

但這不返回第三份工作。 –

+0

現在它:) :)編輯 – Tiit

+0

謝謝你的朋友;) –