2013-12-20 39 views
0

我有兩個包含電話號碼的表。SQL選擇並查找其他表中不存在的行

我想檢查addresbook表中是否存在用戶表中不存在的新行。

由於我是SQL新手,這個查詢是否正確?

SELECT * 
FROM addressbook 
WHERE NOT EXISTS (
    SELECT Phone1 
    FROM users 
    WHERE addressbook.phone = users.phone1 
) 

編輯:我的MySQL用戶使用phpMyAdmin介面,抱歉沒有指定前

+1

看看這個: http://stackoverflow.com/questions/173041/not-in-vs-not-exists – user1141796

+0

謝謝!該鏈接非常有用 –

回答

3

看起來不錯,但我不喜歡這樣。

select a.* from addressbook a 
left outer join users u on a.phone = u.phone1 
where 
(u.phone1 is null) 

這更簡單,可能更快。

+0

問題有明確的定義,他/她想要在用戶表中找到那些不存在的地址(通過電話)。 –

+0

@VishalPatel是的,這是我的查詢所做的。 –

+0

我的查詢也是一樣的。你已經使用了左外連接,並且我使用了'Not In' –

0

在SQL Server查詢是

SELECT * from addressbook WHERE Phone NOT in (SELECT Phone1 from users) 
+0

OP不希望「內部連接」,而是相反。 –

+0

@ peter.petrov你說什麼? –

+0

「我想檢查addresbook表中是否存在用戶表中不存在的新行。」他需要從AddressBook到用戶的左外連接。而你的兩個查詢在邏輯上並不相同。這就是我說的。 –

相關問題