2014-12-02 19 views
1

我試圖找到所有的未表之間匹配的標識的,我的SQL是:如何不要使用SQL

SELECT UserP.*, AccountP.* 
FROM UserP 
    FULL JOIN AccountPON (UserP.Id = AccountP.Id) 
WHERE UserP.Id NOT IN AccountP.Id 
+0

? – Backtrack 2014-12-02 14:19:51

回答

6

您可以使用此子查詢:

SELECT * FROM UserP WHERE Id NOT IN (select Id from AccountPON); 
0
select * from tableName where id not in (1,2,3) 

它將使所有記錄的ID爲1,除了或2或3

IN is basically used as OR boolean operator in MYSQL. 
3

您可以像使用FULL OUTER JOIN一樣在兩組中找到不匹配項。在全外連接,連接鍵將其上不匹配的側空子,所以查詢需要更改爲:

SELECT UserP.*, AccountP.* 
FROM UserP FULL JOIN AccountPON ON UserP.Id = AccountP.Id 
WHERE UserP.Id IS NULL OR AccountP.Id IS NULL; 

SqlFiddle here

WHERE Id NOT IN...子查詢只會返回您數據,是在LHS而不是在RHS表中,這似乎只解決了你之後的一半 - 你需要爲RHS重複NOT IN而不是LHS,然後將兩個結果聯合起來,如下所示:

SELECT Id 
FROM UserP 
WHERE Id NOT IN (SELECT ID FROM AccountPON) 

UNION ALL 

SELECT Id 
FROM AccountPON 
WHERE Id NOT IN (SELECT ID FROM UserP); 
0

NOT IN: - 根據表達式是包含在列表中還是從列表中排除,指定搜索表達式。搜索表達式可以是常量或列名,列表可以是一組常量,更常見的是子查詢。括值的括號中的列表

SELECT * 
FROM UserP 
WHERE Id NOT IN (SELECT Id from AccountP) 

參考,以瞭解更多: -

http://msdn.microsoft.com/en-us/library/ms173545.aspx ,你想找到它不在AccountPON表中的ID http://msdn.microsoft.com/en-us/library/ms177682.aspx