Соединить таблицы, полученные из вложенных селектов
У меня есть следующий запрос:
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 шт):
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;