Один из способов избежать дублирования - использовать exists
с коррелированным подзапросом, а не join
:
select b.*
from books b
where exists (select 1 from links l where b.id = l.book_id and l.author_id in (1, 2))
. Здесь отображаются books
, которые совпадают без их авторов.
Другим (возможно, менее эффективным) подходом является агрегирование и group_concat()
для помещения всех подходящих авторов в одну строку:
select b.id, b.title, b.year, b.price, group_concat(l.author_id) author_ids
from books b
inner join links l on l.book_id = b.id
where l.author_id in (1, 2)
group by b.id, b.title, b.year, b.price