SQL / ORACLE Отсутствует ключевое слово
Я работаю над файлом sql, пытаясь создать скрипт, который возвращает либо все данные из показанных таблиц, либо все данные из таблиц плюс данные за 3 месяца. Я получаю ошибку, которая говорит error 00905 missing keyword
и я не понимаю почему.
Я посмотрел на синтаксис, и все это выглядит правильно для меня. Я поставлю маркер в том месте, где написано, что произошла ошибка (при первом внутреннем соединении). Я изменил все имена таблиц, чтобы они выглядели лучше, так как они по синтаксису.
Любая помощь будет здорово, спасибо. Это только часть кода, но я уверен, что он должен быть здесь.
WHEN Table_typ_cde = '1' -- Pulling all data --
THEN
INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
INNER JOIN Table brnch ON Table_OID = Table_oid
INNER JOIN Table a ON Table_OID = Table_oid
INNER JOIN Table c Table_OID = Table_oid
INNER JOIN Table s ON Table_OID = Table_oid
INNER JOIN Table r ON Table_OID = Table_oid
INNER JOIN Table grp ON Table_oid = Table_oid
INNER JOIN Table on Table_id = Table_id
WHERE Table_ID <> 2
WHEN Table_cde = '2' -- Pulling all data within the last 3 months along with all present data --
THEN
INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
INNER JOIN Table brnch ON Table_OID = Table_oid
INNER JOIN Table a ON Table_OID = Table_oid
INNER JOIN Table c ON Table_OID = Table_oid
INNER JOIN Table s ON Table_OID = Table_oid
INNER JOIN Table r ON Table_OID = Table_oid
INNER JOIN Table grp ON Table_oid = Table_oid
INNER JOIN Table on Table_id = Table_id
WHERE Table_ID <> 2
AND df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6)
AND sysdate
END
) core
2 ответа
Вы не можете сломать JOIN
с помощью CASE
, Я видел это в какой-то части вашего запроса,
THEN
INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
это неправильно, вы должны предоставить имя таблицы до INNER JOIN
ключевое слово.
У вас есть два набора соединений, которые кажутся равными. Тогда у вас есть фильтр даты, который вы хотите применить условно. Вы должны применить это в предложении WHERE, а не ОТ. Некоторым нравится это
FROM ... INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
INNER JOIN Table brnch ON Table_OID = Table_oid
INNER JOIN Table a ON Table_OID = Table_oid
INNER JOIN Table c ON Table_OID = Table_oid
INNER JOIN Table s ON Table_OID = Table_oid
INNER JOIN Table r ON Table_OID = Table_oid
INNER JOIN Table grp ON Table_oid = Table_oid
INNER JOIN Table on Table_id = Table_id
WHERE Table_ID <> 2
AND (Table_cde = '1'
or ( Table_cde = '2'
and df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6) AND sysdate ))