加入2对多关系

时间:2011-06-10 21:26:40

标签: mysql sql

我正在尝试加入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

2 个答案:

答案 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。