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

时间:2018-03-06 15:35:42

标签: sql ms-access database-design

我在访问时遇到了一些问题。我有一个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)

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

1 个答案:

答案 0 :(得分: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)