在Access 2010中工作。
我需要制定一个查询,该查询使用一个表的内容来排除另一个表的内容。一个表是地址列表,另一个是简档代码列表,其中可以有任何地址的零个或多个简档代码。因此,如果我正在为邮件标签创建一批地址,我想要排除所有具有“无邮件”配置文件代码的地址。
我相信这个需要一个子查询,而我从来没有能够做到这一点。
一般表格:
SELECT * from AddressList
WHERE NOT IN
(select code from Profile where AddressList.ID = Profile.ID
and Profile.code = "No Mail")
答案 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