2010-03-18 7 views
2

J'ai cherché partout pour cela, mais je n'arrive pas à trouver une solution. Peut-être que j'utilise les mauvais termes. De toute façon, je me tourne vers le bon vieux 'S.O. pour aider mon trouver la réponse.MySQL: Sélectionnez les lignes restantes

J'ai deux tables, nous allons les appeler des « outils » et « installe »

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

Les enregistrements de la table 'outils outils disponibles, qui sont ensuite installés par un utilisateur et enregistré dans les « installations ' table. Sélection des outils mis en place sont assez simples:

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

Comment puis-je choisir les outils restants - ceux qui doivent encore être installés par l'utilisateur # 99?

Je suis désolé si cela est douloureusement évident, mais je n'arrive pas à le comprendre! Merci pour l'aide!

Répondre

6

Utilisation:

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 

Alternativement, vous pouvez utiliser 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) 

... ou 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) 

Parmi les trois options, le LEFT JOIN/IS NULL est le plus efficace sur MySQL. You can read more about it in this article.

+0

C'est fait! Je vous remercie! – bjork24

Questions connexes