2014-02-07 38 views
0

我認爲這是簡單的,但不是那麼今天...如何(使用JOIN)排除基於第二個表中的記錄

我有兩個表的第一個具有與來自第二數據的列。

T1 has Column1 value = "Created" 
T2 has Column1 Value = "Created" and Column2 Value = "OPEN" 

這樣的想法是,從表1中返回的所有行上表2第2欄=「OPEN」

這對當前選擇

SELECT tblCustIncidents.IncidentID, tblCustIncidents.EntryDateTime, tblCustIncidents.Title, tblCustIncidents.StatusType, tblCustIncidents.Summary, tblMaintStatusTypes.StatusDescr 
FROM tblCustIncidents LEFT JOIN 
    tblMaintStatusTypes 
    ON tblCustIncidents.StatusType = tblMaintStatusTypes.StatusType; 

我想我可以只使用在哪裏,但是我不清楚WHERE的位置,或者即使它能工作......我一直在尋找一段時間。我會繼續尋找,並希望有人能指出我正確的方法/答案/職位等謝謝。

在返回數據的屏幕截圖中,最後一列在兩個表中。第二張桌子上有一列顯示物品是打開還是關閉。所以,我想在片段不出現的所有記錄。我已經試過這個SELECT語句...

SELECT tblCustIncidents.IncidentID, tblCustIncidents.EntryDateTime, tblCustIncidents.Title, tblCustIncidents.StatusType, tblCustIncidents.Summary, tblMaintStatusTypes.StatusDescr 
FROM tblCustIncidents LEFT JOIN tblMaintStatusTypes ON tblCustIncidents.StatusType = tblMaintStatusTypes.StatusType 
WHERE tblMaintStatusTypes.OpenOrClosedType = 'Open'; 

enter image description here

好吧,我想通了,訪問是挑剔......這就是我一直這...

SELECT tblCustIncidents.IncidentID, 
     tblCustIncidents.EntryDateTime, 
     tblCustIncidents.Title, 
     tblCustIncidents.StatusType, 
     tblCustIncidents.Summary, 
     tblMaintStatusTypes.StatusDescr 
    FROM tblCustIncidents 
    inner join (SELECT tblCustIncidents.IncidentID, 
     tblCustIncidents.EntryDateTime, 
     tblCustIncidents.Title, 
     tblCustIncidents.StatusType, 
     tblCustIncidents.Summary, 
     tblMaintStatusTypes.StatusDescr 
    FROM tblCustIncidents) 
    ON (tblCustIncidents.StatusType = tblMaintStatusTypes.StatusType AND tblMaintStatusTypes.OpenOrClosedType = 'Open'); 
+0

您能否提供樣本數據和期望的結果? –

+0

如果您執行「左連接」,則您還將從table1中獲取行2的值不是「打開」的行。左連接表示從左表中選擇所有內容,而不管從右表找到的匹配值是否存在。 –

回答

0
SELECT t1.* 
    FROM table1 t1 
    JOIN table2 t2 
     ON t1.Column1=t2.Column1 
    WHERE t2.column2='OPEN' 
+0

我試過,我相信... – jsteffler

+0

SELECT tblCustIncidents.IncidentID,tblCustIncidents.EntryDateTime,tblCustIncidents.Title,tblCustIncidents.StatusType,tblCustIncidents.Summary,tblMaintStatusTypes.StatusDescr FROM tblCustIncidents LEFT JOIN tblMaintStatusTypes ON tblCustIncidents.StatusType = tblMaintStatusTypes.StatusType WHERE tblMaintStatusTypes.OpenOrClosedType ='Open'; – jsteffler

+0

你正在做LEFT JOIN,我提到要定期加入JOIN。 (INNER JOIN INNER字是可選的) –

0

根據您的查詢,你只需要從left補充條款的join比變化joininner,否則您仍然可以獲得表1中的所有行。

SELECT tblCustIncidents.IncidentID 
     ,tblCustIncidents.EntryDateTime 
     ,tblCustIncidents.Title 
     ,tblCustIncidents.StatusType 
     ,tblCustIncidents.Summary 
     ,tblMaintStatusTypes.StatusDescr 
    FROM tblCustIncidents 
    INNER JOIN tblMaintStatusTypes 
     ON tblCustIncidents.StatusType = tblMaintStatusTypes.StatusType 
    WHERE tblMaintStatusTypes.Column2 = 'OPEN' 
+0

OK,沒想到提及這是在訪問。現在我得到一個錯誤 「加入表達不支持」 當我做這個... SELECT tblCustIncidents.IncidentID, tblCustIncidents.EntryDateTime, tblCustIncidents.Title, tblCustIncidents.StatusType, tblCustIncidents.Summary, tblMaintStatusTypes.StatusDescr FROM (tblCustIncidents INNER JOIN tblMaintStatusTypes ON tblCustIncidents.StatusType = tblMaintStatusTypes.StatusType AND tblMaintStatusTypes.OpenOrClosedType ='Open'); – jsteffler

+0

在這種情況下,只需將其更改爲'WHERE'子句。並且將'JOIN'改爲'INNER JOIN',這裏是關於[tag:ms-access]'INNER JOIN'的完整文檔http://msdn.microsoft.com/en-us/library/office/bb208854(v=office。 12)的.aspx – 2014-02-07 15:28:53

相關問題