在Access中的同一个表上查找匹配和不匹配的字段

问题描述 投票:1回答:1

我在使用Access方面遇到了一些麻烦。我有一个PHONES表,其中包含两个非常具体的列:Provider_prefix和client_prefix。我需要能够生成一个查询,它将为我提供不在client_prefix上的每个provider_prefix(也就是说,该提供程序的前缀区域中没有客户端),以及将执行相反操作的那个:给我前缀那场比赛。到目前为止,我已经尝试了以下内容:

SELECT * 
FROM PHONES INNER JOIN PHONES_2
ON PHONES.provider_prefix != PHONES_2.client_prefix;

哪个会失败。我也尝试过以下方法:

SELECT *
FROM PHONES
WHERE provider_prefix NOT IN (SELECT DISTINCT client_prefix
                                FROM PHONES)

虽然在技术上工作,但抛出零,我的猜测是因为列中有空(这两个都是数字类型)。任何想法将非常感激。

sql ms-access database-design
1个回答
0
投票

NOT IN条款往往与Null值很差(见this question)。

避免这种情况的通常方法是重写为NOT EXISTS条款。

SELECT *
FROM PHONES p
WHERE  NOT EXISTS (SELECT 1
                    FROM PHONES s
                    WHERE s.client_prefix = p.provider_prefix)
© www.soinside.com 2019 - 2024. All rights reserved.