在Oracle中,以下MINUS SQL语句返回结果,而所谓的等效OUTER JOIN语句不返回任何结果。
结果:
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;
在不知道数据的情况下,可能是什么原因?
答案 0 :(得分:1)
在第一个查询中,它是MINUS
。表示它会显示DB_LINK_PROD_ENV中存在的所有item_id
,其中包含valid_to =' 09.09.9999'但在DB_LINK_TEST_ENV中没有出现,其中包含valid_to =' 09.09.9999'。
在第二个中,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条件将无法给你任何记录。