2013-04-26 3 views
0

Я думаю, что описание ошибки немного вводит в заблуждение, так как я не вижу ничего плохого в том, как заканчивается запрос. Я пытаюсь присоединиться к трем таблицам, и это не работает. Может ли кто-нибудь указать на то, что я делаю неправильно? Кстати, об Oracle.Присоединение к трем таблицам - проблема с псевдонимом и запрос не закончен

SELECT s.PITIMEDATE, ROUND(SYSDATE-s.PITIMEDATE) DIFFDAYS, s.SRC, s.VSA6, a.VSA9, c.COMMENTS, c.Actions, c.MYID 
FROM alarm_standing_MAU AS s 
INNER JOIN alarm_MAU AS a 
    ON a.SRC = s.SRC 
    AND a.VSA9 = 
    (SELECT VSA9 
     FROM a 
     WHERE a.SRC = s.SRC 
     AND ROWNUM=1) 
INNER JOIN Alarm_Standing_Comments AS c 
    ON c.SRC = s.SRC 
AND s.SRC<>'LastCheck' 
GROUP BY s.SRC, s.PITIMEDATE, s.VSA6, a.VSA9, c.Comments, c.Actions, c.MYID 
ORDER BY s.PITIMEDATE ASC 

Для получения дополнительной информации, я пытался добавить второй присоединиться к запросу, но это становилось немного громоздким, поэтому экспериментировал с псевдонимом. Вот начальный запрос - мне было бы интересно узнать, как улучшить читаемость через псевдоним.

SELECT alarm_standing_MAU.PITIMEDATE, ROUND(SYSDATE-alarm_standing_MAU.PITIMEDATE) DIFFDAYS, alarm_standing_MAU.SRC, alarm_standing_MAU.VSA6, alarm_MAU.VSA9 
FROM alarm_standing_MAU 
INNER JOIN alarm_MAU 
ON alarm_MAU.SRC = alarm_standing_MAU.SRC 
AND alarm_MAU.VSA9 = 
    (SELECT VSA9 
    FROM alarm_MAU 
    WHERE alarm_MAU.SRC = alarm_standing_MAU.SRC 
    AND ROWNUM=1) 
AND alarm_standing_MAU.SRC<>'LastCheck' 
GROUP BY alarm_standing_MAU.SRC, alarm_standing_MAU.PITIMEDATE, alarm_standing_MAU.VSA6, alarm_MAU.VSA9 
ORDER BY alarm_standing_MAU.PITIMEDATE ASC 
+0

У вас есть 'FROM a ', в то время как в вашей базе данных нет таблицы' a'. Вы не можете использовать подобный псевдоним. –

+0

OK = спасибо. Я немного n00b на этом. Является ли проблема, что псевдоним (alarm_MAU AS a) не получает каскадный переход к подзапросу? – ainwood

ответ

0

В качестве подсказки, вы не можете использовать псевдоним в ЕКЕ:

INNER JOIN alarm_MAU AS a 
    ON a.SRC = s.SRC 
    AND a.VSA9 = 
    (SELECT VSA9 
     FROM a       <-- Oops. Might try "FROM alarm_MAU as b" ? 
     WHERE a.SRC = s.SRC 
     AND ROWNUM=1) 

Я не уверен, что вы пытаетесь достичь, но вот где я хотел бы начать.

+0

Предложение 'from' может использоваться для определения псевдонима, но оно не может ссылаться на него. – Andomar

0

Если подзапрос использует ту же таблицу, что и основной запрос, тогда у вас может быть a1 в основном запросе и a2 в подзапросе, например.

SELECT s.PITIMEDATE, 
     ROUND(SYSDATE-s.PITIMEDATE) DIFFDAYS, 
     s.SRC, 
     s.VSA6, 
     a1.VSA9 
FROM alarm_standing_MAU s 
    INNER JOIN alarm_MAU a1 
    ON a1.SRC = s.SRC 
    AND a1.VSA9 = 
    (SELECT a2.VSA9 
    FROM alarm_MAU a2 
    WHERE a2.SRC = s.SRC 
    AND ROWNUM=1) 
    AND s.SRC<>'LastCheck' 
GROUP BY s.SRC, 
     s.PITIMEDATE, 
     s.VSA6, 
     a1.VSA9 
ORDER BY s.PITIMEDATE ASC 
Смежные вопросы