Distinct Join 以查找不匹配的数据 - Teradata

Distinct Join to find data that does NOT match - Teradata

真的为此苦苦挣扎...我编写了以下似乎有效的代码,并标识了与 FrontDoorColour 为红色的位置匹配的 40,000 个地址的行 ID。

SELECT DISTINCT ID
FROM Database.table1
WHERE table1.address = table2.address
AND table1.FrontDoorColour = 'RED'

我遇到的问题是,当我想反转它并识别 FrontDoorColour 为红色但地址不匹配的 10,000 个地址时。

我运行相同的查询但交换

WHERE table1.address = table2.address

WHERE table1.address <> table2.addres

我没有生成 10,000 个不匹配的行,而是得到一个假脱机 space 错误 (2646)

如有任何建议,我们将不胜感激! 谢谢

第二个查询的 EXPLAIN 输出应该产生 PRODUCT JOIN,这可能是您收到假脱机错误的原因。第一个查询也可能会产生一个产品连接,但它可能会在您的假脱机分配范围内进行处理。以下 SQL 应该可以帮助您从表 1 中找到地址 ID,其中地址在表 2 中找不到,而表 1 中的门是红色的地址 ID。

SELECT DISTINCT t1.id
  FROM Database.Table1 t1
 WHERE NOT EXISTS (SELECT 1
                     FROM Database.Table2 t2
                    WHERE t1.address = t2.address)
   AND t1.FrontDoorColour = 'RED';