2011-11-28 74 views
1

可能重复:
Mysql select where not in table的MySQL查询选择哪里都不另一个表

我需要从一个表(T1),选择项目,但排除具有ID在另一个表中的任何结果( t2)并且具有相同的项目ID。

SELECT * 
FROM t1 
WHERE project = 10 

需要排除t2中存在的任何行。

t1.userID = t2.memberID AND t2.projectID = t1.project 

不知道如何把它放在一起......

+1

的可能重复[Mysql的选择哪里都不表(http://stackoverflow.com/questions/354002/mysql-选择在哪里不在表中)和[MySQL:只从一个表中选择电子邮件,如果不在另一个表中](http://stackoverflow.com/questions/1002728/mysql-select-emails-from-one-table -only-if-in-another-table) –

+0

我需要确保2个项目匹配才能排除:projectID和memberID。如果memberID在t2中,但projectID不同,则可以包含它。 – santa

+0

我链接的另外两篇文章为您提供了解决问题所需的信息。你的'WHERE'子句中的'AND'将确保两个项目匹配;如果他们不这样做,他们将不符合“WHERE”的条件并将被包括在内。 –

回答

4
SELECT t1.* 
FROM t1 
LEFT OUTER JOIN t2 ON t1.userID = t2.memberID AND t2.projectID = t1.project 
WHERE t1.project = 10 and t2.projectID IS NULL 
+0

比NOT IN更快(选择...) –

+0

我对LEFT OUTER JOIN的理解是,它将结合t1的结果,将它们与来自t2表的列名相结合,并将t2表中的每列的值设置为NULL。我只想从t1中选择值。如果项目ID在t2中匹配并且usedID匹配,则不要从t1中选择。我对此感到困惑吗?... – santa

+0

好吧,我编辑查询以仅从t1中选择列。如果联接中没有匹配,则左外部联接将第二个表中的所有列设置为null。这些是我用where子句的第二部分删除的行。 – idstam