2009-08-17 462 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