2011-11-28 52 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