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