Cách dễ nhất để đạt được dữ liệu khác nhau chỉ trong các cột bạn muốn là sử dụng GROUP BY
mệnh đề. Theo mặc định, nó sẽ nhóm các hàng, tùy thuộc vào giá trị của cột, chỉ hiển thị các giá trị riêng biệt, vì vậy, nếu bạn muốn nhóm và chỉ hiển thị các tiêu đề và danh mục khác nhau, bạn nên viết truy vấn của mình là:
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
Như bạn có thể thấy, không có DISTINCT
được sử dụng, nhưng bạn sẽ nhận được tất cả các sách có tiêu đề và danh mục riêng. Bạn càng thêm nhiều trường vào GROUP BY
, dữ liệu khác biệt hơn mà bạn nhận được.
Tương tự như vậy, nếu bạn chỉ muốn liệt kê sách theo tên sách, bạn chỉ nên để bk.title trong GROUP BY
mệnh đề