gpt4 book ai didi

sql - Oracle Exadata - LEFT OUTER JOIN 在连接条件下使用 AND 时表现得像 INNER

转载 作者:行者123 更新时间:2023-12-01 14:21:44 25 4
gpt4 key购买 nike

<分区>

背景

最近我的公司从 Oracle 11g 升级到 Exadata。所有生产对象和数据都已成功迁移到新系统,并被验证为系统之间的 1:1 匹配。在我们的新系统上完成第一组每日 ETL 流程后,我们立即发现我们的报告表比预期的要小得多。经过进一步调查,我们发现添加到 LEFT OUTER 联接的批 ID 导致了问题,而这些问题在 11g 上完美运行。

问题

为什么以下查询在 11g 上被视为 LEFT OUTER JOIN,而在 Exadata 上被视为 INNER JOIN?

SELECT 
*
FROM DIM_CALL CALLS
LEFT OUTER JOIN FACT_ACTVY_MNGMT ACTVY_MNGMT
ON ACTVY_MNGMT.CALL_KEY = CALLS.CALL_KEY
AND ACTVY_MNGMT.BATCH_ID = 20141112
LEFT OUTER JOIN DIM_ACTVY ACTVY
ON ACTVY.ACTVY_KEY = ACTVY_MNGMT.ACTVY_KEY
AND ACTVY_MNGMT.BATCH_ID = 20141112

更新

似乎 ETL 过程中使用的查询中有错字,或者原始开发人员只是忽略了这种情况。如果查看最后一个连接,您会注意到连接位于 ACTVY_KEY 和 BATCH_ID 上。问题是它引用的 BATCH_ID 来自 ACTVY_MNGMT 表。数据库本质上将其视为 WHERE 子句,因此 CALL_KEY 为 NULL 的任何情况都会导致失败。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com