Det enklaste sättet att få fram olika data endast i de kolumner du vill ha är att använda GROUP BY
klausul. Som standard grupperar den raderna, beroende på kolumnens värde, och visar endast distinkta värden, så om du vill gruppera och bara visa olika titlar och kategorier bör du skriva din fråga som:
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
Som du kanske ser, ingen DISTINCT
används, men du får alla böcker med distinkta titel och kategorier. Ju fler fält du lade till i GROUP BY
klausul, desto mer distinkt data får du.
På samma sätt, om du bara ville lista böcker efter titel, bör du bara lämna bk.title i GROUP BY
klausul