Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 With .. AS + Join + ORA-918  [new]
Arkady Telelman
Member

Откуда:
Сообщений: 2
В общем у меня есть задача программно генерить подобные запросы

with w as (select * from w_job_d)
select W_INDUSTRY_D.INDUST_NAME, w.job_family_desc
from
W_INDUSTRY_D INNER JOIN w ON W_INDUSTRY_D.ROW_WID = w.row_wid,
W_PARTY_LOGIN INNER JOIN w ON W_PARTY_LOGIN.PARTY_ID = w.row_wid,
W_POSITION_DH INNER JOIN w ON W_POSITION_DH.ROW_WID = w.row_wid

строка (select * from w_job_d) береться из файла свойств - и соответсвенно это может быть любой Select Statment. Все что ниже (т.е. сам Select) - прописан в похожем файле свойств и накладывая их друг на друга я должен получать запросы типа вышеприведенного.

В общем когда в джойне 1 строка, т.е.

with w as (select * from w_job_d)
select W_INDUSTRY_D.INDUST_NAME, w.job_family_desc
from
W_INDUSTRY_D INNER JOIN w ON W_INDUSTRY_D.ROW_WID = w.row_wid
все работает клево.

Если их 2 и более - вылетает 00918-ошибка на любой колонке из w :(
Подскажите что делать (желательно на примере моего запроса)!
СПАСИБО!!!
10 сен 07, 19:26    [4645733]     Ответить | Цитировать Сообщить модератору
 Re: With .. AS + Join + ORA-918  [new]
ГостЪ
Guest
пример, маловразумителен потому что:
1. зачем в запросе таблица w_job_d три раза?
1.1 Декартово произведение это круто, хоть там наверно и 1 строка, какая, по-твоему, функция у запятых во from листе?
1.2 Смешивать ANSII синтаксис и родной оракловый не стоит.

Вообщем переписать всё
как
with w as (..)
select ... from w,a,b,c
where w... = a...
   and w ... = b...
   and w ... = c...

или аналог через inner join.
10 сен 07, 19:40    [4645777]     Ответить | Цитировать Сообщить модератору
 Re: With .. AS + Join + ORA-918  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Arkady Telelman
В общем у меня есть задача программно генерить подобные запросы

with w as (select *  from w_job_d)
select W_INDUSTRY_D.INDUST_NAME, w.job_family_desc
from
W_INDUSTRY_D INNER JOIN w ON W_INDUSTRY_D.ROW_WID = w.row_wid,
W_PARTY_LOGIN INNER JOIN  w ON W_PARTY_LOGIN.PARTY_ID = w.row_wid,
W_POSITION_DH INNER JOIN w ON W_POSITION_DH.ROW_WID = w.row_wid

строка (select * from w_job_d) береться из файла свойств - и соответсвенно это может быть любой Select Statment. Все что ниже (т.е. сам Select) - прописан в похожем файле свойств и накладывая их друг на друга я должен получать запросы типа вышеприведенного.

В общем когда в джойне 1 строка, т.е.

with w as (select *  from w_job_d)
select W_INDUSTRY_D.INDUST_NAME, w.job_family_desc
from
W_INDUSTRY_D INNER JOIN w ON W_INDUSTRY_D.ROW_WID = w.row_wid
все работает клево.

Если их 2 и более - вылетает 00918-ошибка на любой колонке из w :(
Подскажите что делать (желательно на примере моего запроса)!
СПАСИБО!!!

Connected to: 
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production

SQL> WITH w AS (SELECT * FROM emp)
  2   SELECT w.ename, w.job, dept.dname, w.deptno, salgrade.grade
  3  FROM dept INNER JOIN w ON w.deptno = dept.deptno
  4            INNER JOIN salgrade ON W.sal between salgrade.losal AND salgrade.hisal;

ENAME      JOB       DNAME              DEPTNO      GRADE
---------- --------- -------------- ---------- ----------
MILLER     CLERK     ACCOUNTING             10          2
CLARK      MANAGER   ACCOUNTING             10          4
...
WARD       SALESMAN  SALES                  30          2
MARTIN     SALESMAN  SALES                  30          2

14 rows selected.

На вашем примере это будет нечто такое:
with w as (select *  from w_job_d)
select W_INDUSTRY_D.INDUST_NAME, w.job_family_desc
from W_INDUSTRY_D 
     INNER JOIN w ON W_INDUSTRY_D.ROW_WID = w.row_wid
     INNER JOIN W_PARTY_LOGIN ON W_PARTY_LOGIN.PARTY_ID = w.row_wid
     INNER JOIN W_POSITION_DH ON W_POSITION_DH.ROW_WID = w.row_wid

P.S. При оформлении кода используйте, пожалуйста, тег SRC данного форума.
Этим вы повысите свои шансы на получение ответа.
10 сен 07, 20:04    [4645827]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить