Oracle - 结果与 OUTER JOIN 不同的 MINUS 运算符

Oracle - MINUS-operator with different results than OUTER JOIN

在 Oracle 中,以下 MINUS SQL 语句 returns 结果,而据称等效的 OUTER JOIN 语句没有 return 任何结果。

结果:

SELECT
  /*+parallel (8)*/
  pd.item_id
FROM MY_TABLE@DB_LINK_PROD_ENV
WHERE pd.valid_to='09.09.9999'
MINUS
SELECT
  /*+parallel (8)*/
  it.item_id
FROM MY_TABLE@DB_LINK_TEST_ENV
WHERE it.valid_to='09.09.9999' ;

没有结果:

SELECT
  /*+parallel (8)*/
  pd.item_id,
  it.item_id
FROM MY_TABLE@DB_LINK_PROD_ENV
LEFT OUTER JOIN MY_TABLE@DB_LINK_TEST_ENV
ON pd.item_id     = it.item_id
WHERE it.valid_to ='09.09.9999'
AND pd.valid_to   ='09.09.9999'
AND it.item_id   IS NULL;

在不知道数据的情况下,可能是什么原因?

在第一个查询中是 MINUS。意味着它将显示 DB_LINK_PROD_ENV 中存在的所有 item_id 具有 valid_to='09.09.9999' 但不存在于具有 valid_to='09.09.9999' 的 DB_LINK_TEST_ENV 中.
第二个是 LEFT JOIN AND 条件。

it.valid_to ='09.09.9999'
AND pd.valid_to   ='09.09.9999'


所以有可能 DB_LINK_PROD_ENV 中的记录具有 valid_to='09.09.9999' 但 NO DB_LINK_TEST_ENV 中的任何记录valid_to='09.09.9999'。
因此,当您在第一个查询中执行 MINUS 时,它将显示 DB_LINK_PROD_ENV 中存在的记录。但是在第二个查询中,AND 条件将无法为您提供任何记录。