2010-03-18 101 views
2

我到處搜索過這個,但我似乎無法找到解決方案。也許我使用了錯誤的術語。無論哪種方式,我都轉向好信任S.O.幫助我找到答案。MySQL:選擇剩餘的行

我有兩個表,我們會打電話給他們「工具」和「安裝」

tools = id, name, version 
installs = id, tool_id, user_id 

「工具」表中的記錄可用的工具,然後再由用戶安裝並記錄在「安裝'表。選擇安裝的工具足夠簡單:

SELECT tools.name 
    FROM tools 
    LEFT JOIN installs 
    ON tools.id = installs.tool_id 
    WHERE user_id = 99 ; 

如何選擇剩餘的工具 - 尚未由用戶#99安裝的工具?

對不起,如果這是痛苦的明顯,但我似乎無法弄清楚!謝謝您的幫助!

回答

6

用途:

SELECT t.name 
    FROM TOOLS t 
LEFT JOIN INSTALLS i ON i.tool_id = t.id 
        AND i.user_id = 99 
    WHERE i.id IS NULL 

或者,你可以使用NOT EXISTS

SELECT t.name 
    FROM TOOLS t 
WHERE NOT EXISTS(SELECT NULL 
        FROM INSTALLS i 
        WHERE i.tool_id = t.id 
        AND i.user_id = 99) 

...或NOT IN

SELECT t.name 
    FROM TOOLS t 
WHERE t.id NOT IN (SELECT i.tool_id 
         FROM INSTALLS i 
        WHERE i.user_id = 99) 

三個選項中,該LEFT JOIN/IS NULL是最高效MySQL。 You can read more about it in this article

+0

這樣做!謝謝! – bjork24 2010-03-18 22:52:18