2014-04-04 50 views
1

這似乎是我之前完成的,但又一次掙扎了。這裏是我的數據:如何從一個表中獲取所有記錄,並且只能從包含條件的連接表中獲取記錄

tblHotlist 
---------- 
ID 
hotlistStatus 
buildNumber 
loadType 
etc 

tblessr 
------- 
ID 
esHeadline 
notesStatus 
actionItems 
bugStatusID 
etc 

tblBugStatus (not needed in query) 
------------ 
ID 
bugStatus 
etc 

tbl_j_hlbug 
----------- 
esID 
hotlistID 
timestamp 

我想從tblHotlist的所有記錄,如果存在tblESSR記錄,我需要那些bugStatusID = 300。我已經嘗試了幾種不同的連接和子查詢,但仍然無法獲得我需要的結果。有一次,我把bugStatusID = 300的資格賽,我只能從tblHotlist的記錄,其中從tblESSR記錄有300

嘗試失敗的bugStatusID:

SELECT hl.hotlistID, hl.buildnumber, es.ID, es.notesStatus, es.actionItems 
FROM tblhotList hl 
    LEFT OUTER JOIN tbl_j_hlbug j ON j.hotlistID = hl.id 
    LEFT OUTER JOIN tblESSR es ON j.esrID = es.id 
WHERE hl.hotlistStatusID=100 AND hl.loadType='su' AND es.bugStatusID=300 

任何幫助,將不勝感激。我嘗試了不同的連接和幾個子查詢,但我總是得到相同的結果。

謝謝!

回答

1

您必須將限制條件移至連接或查找空值。

WHERE hl.hotlistStatusID=100 AND hl.loadType='su' AND 
(es.bugStatusID=300 or es.bugStatusID is null) 

當外部連接發生時,您必須考慮空值將存在於沒有匹配數據的記錄上。因此,如果您試圖通過這些限制,您最終將排除不帶匹配數據的空值;從而否定外部連接。有時候這就是你想要的......有時候不是。在這種情況下,我認爲你想要空值和300.

SELECT hl.hotlistID, hl.buildnumber, es.ID, es.notesStatus, es.actionItems 
FROM tblhotList hl 
    LEFT OUTER JOIN tbl_j_hlbug j ON j.hotlistID = hl.id 
    LEFT OUTER JOIN tblESSR es 
     ON j.esrID = es.id 
     AND es.bugStatusID=300 
WHERE hl.hotlistStatusID=100 AND hl.loadType='su' 

Hl where子句並不重要,因爲你得到所有記錄開始。

+0

xQbert,非常感謝。我不知道你有資格加入!以前的產品沒有工作,當我嘗試,因爲(我認爲)bugstatusID永遠不會是NULL,你只是沒有關聯連接表中的任何記錄,所以它是一個空集。我用這個查詢運行,但仍然得到了和以前一樣的結果。謝謝大家! – akabobo

+0

它應該工作得很好。表中數據庫術語中的空集合將返回每個字段中的空值。這讓我感到有些困擾,第一種選擇不起作用。考慮加入前發生的加入資格。這不僅可以減少carteasean的開銷,還可以確保您不會排除外連接上的記錄。 – xQbert

2

由於連接的原因,您的一些結果集在WHERE之前的bugStatusID中會有NULL,因此如果您希望看到這些結果,則需要將其添加到您的位置。

SELECT hl.hotlistID, hl.buildnumber, es.ID, es.notesStatus, es.actionItems 
FROM tblhotList hl 
    LEFT OUTER JOIN tbl_j_hlbug j ON j.hotlistID = hl.id 
    LEFT OUTER JOIN tblESSR es ON j.esrID = es.id 
WHERE hl.hotlistStatusID=100 AND hl.loadType='su' AND (es.bugStatusID=300 OR es.bugStatusID IS NULL) 
相關問題