2017-06-05 29 views
0

假設我在兩個表格中名爲「Searched」的列上連接兩個表格。然而,我希望輸出被限制到從我的Catalog表中的連接不等於另一個名爲Part1的第三個表中的任何值(實際上我有興趣將它與大約5個其他表進行比較),但至少要獲得它爲一開始工作。目前,我正在運行的查詢(在MS Access中)沒有輸出,爲什麼?我期待看到一個JOIN,其中有2列減少了Cat2和Part4中「Searched」之間相等的值。在與其他表格進行聯接時使用「NOT EXISTS」進行過濾

SELECT DISTINCT Searches.Search, Cat2.Category 
FROM Searches LEFT JOIN Cat2 
ON Cat2.Searched = Searches.Search 
WHERE NOT EXISTS (SELECT Part4.Searched FROM Part4 INNER JOIN Cat2 ON Cat2.Searched = Part4.Searched); 

回答

1

它不輸出任何內容,因爲NOT EXISTS子查詢總是返回至少一行。

原因是因爲您正在執行JOIN而不是使用關聯子句。所以,試試這個:

SELECT DISTINCT Searches.Search, Cat2.Category 
FROM Searches LEFT JOIN 
    Cat2 
    ON Cat2.Searched = Searches.Search 
WHERE NOT EXISTS (SELECT 1 
        FROM Part4 
        WHERE Cat2.Searched = Part4.Searched 
       ); 

子查詢參考Cat2.Searched現指Cat2外部查詢。這是你正在尋找的邏輯。

爲了提高性能,您需要Part4(Searched)Cat2(Searched, Category)上的索引。

+0

我正在運行這個查詢已經有20-30分鐘了,等待,你會期待它花費很長時間嗎?不知道它有多重要,我的桌子相當大,每個大約有700K +行... – mkheifetz

+0

我無法得到這個東西的工作......它只是運行,從來沒有提出任何輸出,不知道爲什麼? – mkheifetz

相關問題