Справка по SQL-запросу - подзапрос с использованием INTERBASE - PullRequest
3 голосов
/ 20 июня 2011

У меня следующий запрос

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 ]

3 голосов
/ 20 июня 2011

Очевидно, Interbase не поддерживает производные таблицы (SELECT FROM (SELECT)). Или, по крайней мере, версию, которую вы используете (я не могу быть уверен, это было давно, так как я не работаю с Interbase). Эта функция была добавлена ​​в Firebird 2.0. У вас есть два варианта здесь:

  • Измените свой подход, чтобы не использовать SELECT FROM (SELECT) (производные таблицы)

    OR

  • Обновление до Firebird

Если у вас есть для этого автономия, вам следует окончательно перейти к варианту №2.

Кстати, Firebird не требует, чтобы вы объявляли псевдоним для вашей производной таблицы, хотя это в конечном итоге будет необходимо, если ваша производная таблица будет СОЕДИНЕНА с другими таблицами / производными таблицами

2 голосов
/ 20 июня 2011

Вам нужно дать псевдониму подзапросу.

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
1 голос
/ 21 июня 2011

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 

... даст вам те же результаты, что и производная таблица в этом случае ..

0 голосов
/ 20 июня 2011

Я получил эту ошибку:

# 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
0 голосов
/ 20 июня 2011
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
...