2009-08-17 482 views
2

我試圖選擇某個類型,名稱,特定ID中具有相同名稱的條目的條目。最後一部分是我無法理解的棘手部分。Mysql查詢排除某個條目

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

我想要的結果是一個特定類型,但尚未包含在當前ID中的所有名稱的集合。

我需要在這裏執行兩個查詢嗎?或者我可以將它凝聚成一個。

謝謝。

回答

9

您可以使用此子查詢:

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

感謝Zed,還有一件事 - 如果我有多個「名稱」進行比較,該怎麼辦?類似於AND name,criteria,rank NOT IN(SELECT * FROM t ...)不起作用,我想確保名稱和條件和排名不在 – Dirk 2009-08-17 20:00:03

+0

我知道我可以做更多的子查詢,但再次,我可以把它凝聚成一個嗎? – Dirk 2009-08-17 20:01:04

1

你的意思是,像這樣:

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

你能在你的架構提供更詳細一點?具體的例子總是有用的

+0

這與Zed給出的幾乎完全一致,因爲我有一個以上的「姓名」字段在 – Dirk 2009-08-17 20:01:53

2

如果將多個值與一個子查詢這種方式返回行:

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

您必須確保列表(name, criteria, rank)子查詢選擇的列相匹配。你不應該使用SELECT *

+0

上不匹配。謝謝比爾,解決了我的問題 - 必須接受Zed的答案,但無論如何要感謝。 – Dirk 2009-08-17 20:20:21

+0

沒問題,Zed的回答更具體到你的第一個問題。 – 2009-08-17 20:33:39