La forma más fácil de lograr diferentes datos solo en las columnas que desea es usar GROUP BY
cláusula. De forma predeterminada, agrupará las filas, según el valor de la columna, mostrando solo valores distintos, por lo que, si desea agrupar y mostrar solo diferentes títulos y categorías, debe escribir su 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 puede ver, no DISTINCT
se usa, pero obtendrá todos los libros con distintos títulos y categorías. Cuantos más campos haya agregado al GROUP BY
cláusula, más datos distintos obtendrá.
De la misma manera, si solo desea listar libros por título, solo debe dejar bk.title en GROUP BY
cláusula