Как правило, любой столбец, который не отображается в статистической функции, должен быть включен в предложение GROUP BY
, однако, если выбранная таблица имеет первичный ключ, то простое включение первичного ключа в предложение GROUP BY
разрешает все столбцыэтой таблицы, которая будет выбрана без агрегации, которую вы используете в первом запросе.Однако этот подход не работает, когда первичный ключ заключен в подзапрос , поскольку оптимизатор Postgres больше не может сказать, что столбец изначально был первичным ключом.
Чтобы обойти это, вы могли былибо перечислите все столбцы подзапроса book
явным образом (что может быть громоздким).
В качестве альтернативы, вы можете объединить и сгруппировать таблицы gardner_record
и gardner_e_book_record
в подзапросе, а затем присоединиться к gardner_inventory_item
потом.По сути, просто поместите ваш первый запрос в качестве подзапроса и затем присоединитесь к таблице gardner_inventory_item
.Пример:
select book_e_ebooks, i.* from (
select r.*, array_agg(e) e_books from gardner_record r
left join gardner_e_book_record e on r.ean_number = e.physical_edition_ean
group by r.id
) book_e_ebooks
left join gardner_inventory_item i on book_e_ebooks.ean_number = i.ean;
Но подзапросу вообще не нужен:
select r.*, i.*, array_agg(e) e_books from gardner_record r
left join gardner_inventory_item i on r.ean_number = i.ean
left join gardner_e_book_record e on r.ean_number = e.physical_edition_ean
group by r.id, i.id