在MS Access SQL查询中使用WHERE NOT EXISTS

时间:2018-09-25 21:15:22

标签: sql ms-access

我有一个查询,该查询将查询中的一个字段与表中的另一个字段进行匹配。这是查询:

SELECT DISTINCT CarriersToSend.Carrier, [Dual Year Carrier Report].TPA_CARRIER
FROM [Dual Year Carrier Report] INNER JOIN CarriersToSend ON [Dual Year Carrier Report].TPA_CARRIER = CarriersToSend.Carrier;

它返回与CarriersToSend查询的Carrier字段和[Dual Year Carrier Report]的TPA_CARRIER字段匹配的值。

然后,我需要返回CarriersToSend查询的Carrier字段中未在上面的查询中出现的值。我认为这就像是“不存在查询”。我在下面放一个,但是它什么也没返回,我不知道为什么。任何帮助将非常感激。谢谢!

SELECT DISTINCT EE_First, EE_LAST
FROM [Dual Year Carrier Report]
WHERE NOT EXISTS (
SELECT DISTINCT CarriersToSend.Carrier, [Dual Year Carrier Report].TPA_CARRIER
FROM [Dual Year Carrier Report] INNER JOIN CarriersToSend ON [Dual Year Carrier Report].TPA_CARRIER = CarriersToSend.Carrier;)

2 个答案:

答案 0 :(得分:1)

您的带有子查询的NOT EXISTS与主查询未连接,因此不会返回任何结果。

您可以尝试一下。

SELECT DISTINCT EE_First, EE_LAST
FROM [Dual Year Carrier Report] t1
WHERE NOT EXISTS 
(
    SELECT 1
    FROM CarriersToSend t2
    WHERE t1.TPA_CARRIER = t2.Carrier
)

答案 1 :(得分:1)

您的半冒号应放在右括号后。 除此之外,您的查询在逻辑上永远不会返回任何记录。 那是因为您的子查询返回一个结果,然后您尝试返回的结果与子查询的结果不匹配。这将在逻辑上导致错误条件。 尝试以下方法:

SELECT DISTINCT EE_First, EE_LAST
FROM [Dual Year Carrier Report]
WHERE NOT EXISTS 
(
SELECT '1'
FROM CarriersToSend INNER JOIN [Dual Year Carrier Report] ON 
CarriersToSend.Carrier = [Dual Year Carrier Report].TPA_CARRIER
);