我在访问时遇到了一些问题。我有一个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)
当技术上工作时,抛出零,我的猜测是因为列中有空(这两个都是数字类型)。 任何想法都将非常感激。
答案 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)