我正在尝试加入3个表但是得到了一些不寻常的结果,例如有3个记录来自bookid 1,因为它在3个类别中,我该如何避免这种情况?表结构是;
table = book - bookid - 作者 - 标题
table = categoriesbooks - bookid - categoryid
table = category - categoryid - categorydesc
当我使用;
加入表格时SELECT book.bookid, book.author, book.title, category.categorydesc
FROM book
JOIN bookscategories ON book.bookid = bookscategories.bookid
JOIN category ON bookscategories.categoryid = category.categoryid
答案 0 :(得分:3)
简单,使用bookid组将每个图书的结果限制为一行。 您可以使用group_concat仍然可以查看CSV列表中的所有类别。
SELECT book.bookid, book.author, book.title, group_concat(category.categorydesc)
FROM book
JOIN bookscategories ON book.bookid = bookscategories.bookid
JOIN category ON bookscategories.categoryid = category.categoryid
GROUP BY book.book_id
请参阅:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
答案 1 :(得分:-1)
好吧,假设你只需要每本书一个记录,你想要第一个分类,categorydesc
是数字,你需要这样的东西(你可能需要玩具体细节)
select distinct b.bookid, b.author, b.title, (min)c.categorydesc
from book b
join bookscategories bc on b.bookid = bc.bookid
join category c on bc.categoryid = c.categoryid
如果categorydesc并不总是数字,那么你需要做的是写一个Where
子句,它实际上是第二个select语句,你可以为每个不同的书提取最低的CategoryId。