2009-12-22 104 views
1
SELECT * 
    FROM (SELECT ROWNUM rnum, 
       query.* 
     FROM (WITH myQuery AS(
        SELECT column_b 
         FROM table_a a 
        WHERE a.column_a = 1234) 
     SELECT b.column_e AS some_column 
      FROM table_b b, 
       table_c c, 
       table_a a 
     LEFT JOIN table_d d ON c.column_c = d.column_d 
      JOIN myQuery mq ON a.column_b = mq.column_b 
      WHERE b.column_b = a.column_b) query) 
WHERE rnum > 0 
+0

您是否收到錯誤消息或意外結果? – harto 2009-12-22 01:13:35

+0

錯誤消息,在第二個連接條件,說ORA-00904的,無效的字符串標識符 – user61734 2009-12-22 01:15:36

+0

沒了,我查了列名,他們是正確的Oracle的 – user61734 2009-12-22 01:21:18

回答

2

不要混合使用ANSI-88和ANSI-92 JOIN語法,選擇一個或其他。下面是使用ANSI-92語法查詢:

WITH myQuery AS (
    SELECT column_b 
    FROM table_a a 
    WHERE a.column_a = 1234) 
SELECT x.* 
    FROM (SELECT b.column_e AS some_column, 
       ROWNUM 'rnum' 
      FROM table_b b 
      JOIN TABLE_A a ON a.column_b = b.column_b 
      JOIN myQuery mq ON mq.column_b = a.column_b 
      JOIN table_c c ON c.? = ?? --need join criteria here 
    LEFT JOIN table_d d ON c.column_c = d.column_d) x 
WHERE x.rnum > 0 

你舉的例子沒有什麼TABLE_C加入到 - 因此???

我不知道WITH子句可以在子查詢中被定義 - 我當然,我以前在10g嘗試過時遇到了一個錯誤。

+0

-1您的觀點#1 - 可以在子查詢中定義WITH子句。 +1重新指出#2 - 新舊連接語法的混合是ORA-00904的原因。 – 2009-12-22 05:24:25