В конечном итоге мне нужен список «импортных» записей, включающих «альбомные» записи, в каждой из которых есть только одна «песня».
Вот что я сейчас использую:
select i.id, i.created_at
from imports i
where i.id in (
select a.import_id
from albums a inner join songs s on a.id = s.album_id
group by a.id having 1 = count(s.id)
);
Вложенный выбор (с объединением) работает очень быстро, но внешнее предложение in работает мучительно медленно.
Я попытался сделать весь запрос одним (без вложенности) соединением, но столкнулся с проблемами с предложениями group / Have. Лучшее, что я мог сделать, это список «импортных» записей с дубликатами, что неприемлемо.
Есть ли более элегантный способ составить этот запрос?