Соединить таблицы, полученные из вложенных селектов

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

select * from (
    select max(id), code
    from (
        select id, code from doc where code IN (
        '12-02-2021_1',
        '12-02-2021_2',
        '12-02-2021_3',
        '12-02-2021_4'
        )
    )
    group by 2
) 

Мне нужно к этому запросу присоединить таблицу config, которая на основе поля doc.state присоединяет наименование состояния (config.stname), но простой следующий left join в firebird не работает в данном случае:

select * from ( select ... from ... group by ... ) seldocs
left join config conf on seldocs.id = conf.docid;

Может здесь есть какой-то особенный синтаксис для таких left join'ов? Желательно без with. (версия firebird - 2.5).

ошибка: Invalid token. Dynamic SQL Error. SQL error code = -104. Invalid command. no column name specified for column number 1 in derived table SELDOCS.

ошибка 2 (после добавления "max(id) as id"): Column does not belong to referenced table. Dynamic SQL Error. SQL error code = -206. Column unknown. SELDOCS.STATE. At line 13, column 31.

Дополнение: если написать select max(id) as id, code, state (select from select id, code, state (...)) group by 2,3, то выдаст 8 документов (вместо четырёх), т.к. code не уникальный, а уникальный только id, и нужно выбрать именно max(id) из всех doc с одинаковым code.


Ответы (1 шт):

Автор решения: Akina
select * 
from (select max(id) AS id, code
      from doc 
      where code IN ( '12-02-2021_1',
                      '12-02-2021_2',
                      '12-02-2021_3',
                      '12-02-2021_4' )
      group by code ) AS subquery
left join config on subquery.id = config.docid;
→ Ссылка