2009-08-17 9 views
2

J'essaie de SÉLECTIONNER des entrées d'un certain type, nom, EXCLUANT des entrées avec le même nom dans un identifiant particulier. La dernière partie est la partie délicate que je ne peux pas comprendre.Mysql Query Exclure une certaine entrée

SELECT name FROM table WHERE type = $type AND (name is not contained in an entry with id). 

Je veux que le résultat soit l'ensemble de tous les noms qui sont d'un certain type mais qui ne sont PAS déjà inclus dans un identifiant courant.

Dois-je exécuter deux requêtes ici? Ou puis-je le condenser en un.

Merci.

Répondre

9

Vous pouvez utiliser une sous-requête pour cela:

SELECT name 
FROM table 
WHERE type = $type 
AND name NOT IN (SELECT entry FROM t WHERE id = $id); 
+0

Merci Zed, encore une chose - et si j'ai plus d'un "nom" à comparer. Quelque chose comme le nom AND, les critères, le rang NOT IN (SELECT * FROM t ...) ne fonctionne pas, où je veux m'assurer que le nom ET les critères AND rank ne sont PAS – Dirk

+0

Je sais que je peux faire plus de sous-requêtes, mais encore , puis-je le condenser à un? – Dirk

1

Voulez-vous dire comme ceci:

SELECT name FROM table WHERE type = $type 
         AND name not in ('larry','moe','curly'). 

Pouvez-vous fournir un peu plus de détails sur votre schéma? Des exemples concrets aident toujours.

+0

C'est à peu près ce que Zed a donné, j'ai plus d'un champ "nom" pour ne pas correspondre – Dirk

2

Si vous comparez plusieurs valeurs à une ligne renvoyée par un sous-requête de cette façon:

SELECT name FROM table 
WHERE type = $type 
AND (name, criteria, rank) NOT IN 
    (SELECT name, criteria, rank FROM t WHERE id = $id); 

Vous devez vous assurer que la liste (name, criteria, rank) correspond aux colonnes sélectionnées dans la sous-requête. Vous ne devez pas utiliser SELECT *.

+0

Merci Bill, qui a corrigé mon problème - a dû accepter la réponse de Zed, mais merci quand même. – Dirk

+0

Pas de problème, la réponse de Zed était plus spécifique à votre première question. –