Помощь с SQL-запросом - подзапрос с использованием INTERBASE
У меня есть следующий запрос
SELECT *
FROM
( select distinct
r1.rep_code,
r1.contact_id,
c1.Name,
e1.year_num,
e1.period_num
from
entry e1
join rep r1 ON e1.rep_code = r1.rep_code
join contact c1 on r1.contact_id = c1.contact_id
where
e1.entry_type = 'SJOB'
and e1.age = 0 )
Я получаю сообщение об ошибке в строке 3
Token unknown - line 3, char 15
select
Можете ли вы дать совет, кстати, я использую InterBase IBConsole!
5 ответов
По-видимому, Interbase не поддерживает производные таблицы (SELECT FROM (SELECT)
). Или, по крайней мере, версию, которую вы используете (я не могу быть уверен, это было давно, так как я не работаю с Interbase). Эта функция была добавлена в Firebird 2.0. У вас есть два варианта здесь:
Измените свой подход, чтобы вы не использовали
SELECT FROM (SELECT)
(производные таблицы)ИЛИ ЖЕ
Обновление до Firebird
Если у вас есть автономия для этого, вы должны окончательно выбрать вариант № 2.
Кстати, Firebird не требует, чтобы вы объявляли псевдоним для вашей производной таблицы, хотя это в конечном итоге будет необходимо, если ваша производная таблица будет СОЕДИНЕНА с другими таблицами / производными таблицами
InterBase не поддерживает производные таблицы. Но они не дают никакой выгоды для этого запроса, поэтому просто избавьтесь от него:
select distinct
r1.rep_code,
r1.contact_id,
c1.Name,
e1.year_num,
e1.period_num
from
entry e1
join rep r1 ON e1.rep_code = r1.rep_code
join contact c1 on r1.contact_id = c1.contact_id
where
e1.entry_type = 'SJOB'
and e1.age = 0
... даст вам те же результаты, что и производная таблица в этом случае..
Вам нужно дать подзапросу псевдоним.
SELECT *
FROM
( select distinct
r1.rep_code,
r1.contact_id,
c1.Name,
e1.year_num,
e1.period_num
from
entry e1
join rep r1 ON e1.rep_code = r1.rep_code
join contact c1 on r1.contact_id = c1.contact_id
where
e1.entry_type = 'SJOB'
and e1.age = 0 ) AS tbl
SELECT *
FROM
( select distinct
r1.rep_code,
r1.contact_id,
c1.Name,
e1.year_num,
e1.period_num
from
entry e1
join rep r1 ON e1.rep_code = r1.rep_code
join contact c1 on r1.contact_id = c1.contact_id
where
e1.entry_type = 'SJOB'
and e1.age = 0 ) AS TABLE1
Я получил эту ошибку:
# 1248 - У каждой производной таблицы должен быть свой псевдоним
попробуйте что-то вроде:
SELECT *
FROM
( select distinct
r1.rep_code,
r1.contact_id,
c1.Name,
e1.year_num,
e1.period_num
from
entry e1
join rep r1 ON e1.rep_code = r1.rep_code
join contact c1 on r1.contact_id = c1.contact_id
where
e1.entry_type = 'SJOB'
and e1.age = 0 ) AS entries