我有一個表,它是在一個數值列(ROW_ID)分區列表,甲骨文分區忽略不工作聯接使用
TABLEA (ROW_ID NUMERIC(38), TB_KEY NUMERIC(38), ROW_DATA VARCHAR(20));
分區修整時,我從表中查詢沒有聯接工作 :
SELECT A.* FROM TABLEA A
WHERE ROW_ID IN (SELECT ID FROM TABLEB WHERE DT_COL = SYSDATE);
分區修剪失敗當我左外連接到表B
SELECT A.* FROM TABLEA A
LEFT OUTER JOIN TABLEB B ON A.TB_KET = B.TB_KEY
WHERE ROW_ID IN (SELECT ID FROM TABLEB WHERE DT_COL = SYSDATE);
分區修剪當我改變左外工作加入到內部連接
SELECT A.* FROM TABLEA A
INNER JOIN TABLEB B ON A.TB_KET = B.TB_KEY
WHERE ROW_ID IN (SELECT ID FROM TABLEB WHERE DT_COL = SYSDATE);
分區修剪工作當我做左外連接到表B,並且不使用IN子句
SELECT A.* FROM TABLEA A
LEFT OUTER JOIN TABLEB B ON A.TB_KET = B.TB_KEY
WHERE ROW_ID = 123;
分區修剪工程當我離開外連接到TableB和使用IN子句的靜態值
SELECT A.* FROM TABLEA A
LEFT OUTER JOIN TABLEB B ON A.TB_KET = B.TB_KEY
WHERE ROW_ID IN (123, 345);
有人能解釋一下爲什麼左外連接會導致分區修剪失敗,當我查詢表上的分區使用IN子句與子查詢結果的列?