2013-12-20 41 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到用户的左外连接。而你的两个查询在逻辑上并不相同。这就是我说的。 –

相关问题