что не так с этим оракулом? - PullRequest
1 голос
/ 22 декабря 2009
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

1 Ответ

2 голосов
/ 22 декабря 2009

Не смешивайте синтаксис 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.

...