我有一个表,它是在一个数值列(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子句与子查询结果的列?