2009-08-17 20 views
2

Ich versuche, Einträge eines bestimmten Typs, Name, ausgeschlossene Einträge mit dem gleichen Namen in einer bestimmten ID. Der letzte Teil ist der schwierige Teil, den ich nicht verstehen kann.Mysql Query Einen bestimmten Eintrag ausschließen

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

Ich möchte, dass das Ergebnis die Menge aller Namen ist, die ARE eines bestimmten Typs sind, aber NICHT bereits in einer aktuellen ID enthalten sind.

Muss ich hier zwei Abfragen ausführen? Oder kann ich es zu einem verdichten.

Danke.

Antwort

9

Sie können eine Unterabfrage für diesen Einsatz:

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

Dank Zed, eine weitere Sache - was ist, wenn ich mehr als einen "Namen" zu vergleichen habe. Etwas wie UND Name, Kriterien, Rang NICHT IN (SELECT * FROM t ...) funktioniert nicht, wo ich sicherstellen möchte, dass Name und Kriterien UND Rang sind nicht in – Dirk

+0

Ich weiß, ich kann nur mehr Unterabfragen, aber wieder Kann ich es zu einem verdichten? – Dirk

1

Sie wie so bedeuten Sie:

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

Könnten Sie ein wenig mehr Details über Ihr Schema zur Verfügung stellen? Konkrete Beispiele helfen immer.

+0

Es ist ziemlich genau das, was Zed gab, ich habe mehr als ein "Name" -Feld, das NICHT auf – Dirk

2

Wenn Sie mehrere Werte in eine Reihe zu vergleichen, von einer Unterabfrage auf diese Weise zurück:

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

Sie sicher, dass die Liste machen müssen (name, criteria, rank) die Spalten in der Unterabfrage ausgewählten Spielen. Sie sollten SELECT * nicht verwenden.

+0

passt Danke Bill, das mein Problem behob - musste Zeds Antwort akzeptieren, aber trotzdem danke. – Dirk

+0

Kein Problem, Zeds Antwort war spezifischer auf deine erste Frage. –