使用一个表中的数据排除另一个表中的结果

时间:2013-12-14 19:34:03

标签: sql ms-access

在Access 2010中工作。

我需要制定一个查询,该查询使用一个表的内容来排除另一个表的内容。一个表是地址列表,另一个是简档代码列表,其中可以有任何地址的零个或多个简档代码。因此,如果我正在为邮件标签创建一批地址,我想要排除所有具有“无邮件”配置文件代码的地址。

我相信这个需要一个子查询,而我从来没有能够做到这一点。

一般表格:

SELECT * from AddressList
WHERE NOT IN
(select code from Profile where AddressList.ID = Profile.ID 
and Profile.code = "No Mail")

3 个答案:

答案 0 :(得分:1)

您有正确的想法,但您正在寻找的运营商是EXISTS。如果子查询返回一个或多个结果,则评估为true,如果不返回任何行,则评估为false

SELECT * 
FROM   AddressList
WHERE NOT EXISTS
(select code from Profile where AddressList.ID = Profile.ID and Profile.code = "No Mail")

答案 1 :(得分:0)

您尝试编写的语法似乎最适合not in

SELECT *
from AddressList
WHERE id NOT IN (select id from Profile Profile.code = "No Mail");

另一种写法是使用left join

select al.*
from AddressList al left join
     Profile p
     on p.id = al.id and
        p.code = "No Mail"
where p.id is null;

答案 2 :(得分:0)

以下是使用LEFT JOIN做同样事情的更好方法。

SELECT * 
FROM AddressList 
LEFT JOIN Profile 
ON AddressList.ID = Profile.ID 
AND Profile.code = 'No Mail'
WHERE Profile.ID IS NULL