A maneira mais fácil de obter dados diferentes apenas nas colunas desejadas é usando
GROUP BY
cláusula. Por padrão, ele agrupará as linhas, dependendo do valor da coluna, mostrando apenas valores distintos, portanto, se você deseja agrupar e mostrar apenas títulos e categorias diferentes, deve escrever sua consulta como: SELECT bk.title AS Title, bk.year AS Year, aut.authorname AS Author, cat.category AS Category
FROM book bk
JOIN book_category bk_cat
ON bk_cat.book_id = bk.bookid
JOIN categories cat
ON cat.id = bk_cat.category_id
JOIN books_authors bk_aut
ON bk_aut.book_id = bk.bookid
JOIN authors aut
ON aut.id = bk_aut.author_id
GROUP BY bk.title, cat.category
ORDER BY bk.title ASC
Como você pode ver, não há
DISTINCT
é usado, mas você obterá todos os livros com títulos e categorias distintos. Quanto mais campos você adicionar ao GROUP BY
cláusula, mais dados distintos você obteria. Da mesma forma, se você quiser apenas listar livros por título, você deve deixar apenas bk.title no
GROUP BY
cláusula