2015-10-10 39 views
1

我正在嘗試獲取我們的數據庫中的公司列表,它們是account_level IN ('basic', 'full')。我們的客戶是account_level ='enterprise'。在很多情況下,企業客戶端在db中也會有行,因爲他們基本或完整,所以我想排除也有企業行的任何基本/完整公司(即我想排除我們當前的客戶端)。通過這種方式,我可以得到一份嚴格基礎或全面的公司名單,但實際上並非我們的客戶。MySQL查詢列出不屬於某種類型的項目

這裏是該公司表的例子:

1 company a basic 
2 company a full 
3 company b basic 
4 company b enterprise 
5 company c basic 

我想查詢返回公司a和c。

我試圖使用方法:

SELECT * 
    FROM company c1 
    INNER JOIN company c2 ON c1.id=c2.id 
    WHERE c1.company NOT IN (SELECT c2.company FROM company c2  
    WHERE account_level = 'enterprise') 
    AND c1.account_level IN ('full', 'basic') 
    ORDER BY c1.company; 

,但沒有結果。有人可以看到我做錯了嗎?對不起,我還沒有經驗豐富的MySQL。謝謝你的幫助。

回答

1

可以使用的EXISTSNOT EXISTS組合得到期望的結果:

SELECT DISTINCT c1.company 
FROM company c1 
WHERE EXISTS (SELECT 1 
       FROM company AS c2 
       WHERE c1.company = c2.company AND c2.account_level IN ('full', 'basic')) 

     AND 

     NOT EXISTS (SELECT 1 
        FROM company AS c3 
        WHERE c1.company = c3.company AND c3.account_level IN ('enterprise') 

甚至更​​簡單:

SELECT DISTINCT c1.company 
FROM company c1 
WHERE c1.account_level IN ('full', 'basic')) 

     AND 

     NOT EXISTS (SELECT 1 
        FROM company AS c2 
        WHERE c1.company = c2.company AND c2.account_level IN ('enterprise') 
+0

謝謝你,這正是我需要的!我感謝你的指導。 – nyancat

+0

@LeahKelly很高興我能夠幫助。請標記此答案或任何其他答案,如果它確實幫助您解決問題,那麼您的答案也會被接受。 –

+0

我很想去,但我顯然沒有足夠的聲望去做 - 當我嘗試時,它說我需要15個聲望點,並且在這裏是新的,所以我沒有。 – nyancat

相關問題