Присоединение 2 один ко многим отношениям - PullRequest
2 голосов
/ 11 июня 2011

Я пытаюсь объединить 3 таблицы, но получаю некоторые необычные результаты, например, из bookid 1 появляются три записи, как в 3 категориях, как мне этого избежать?

стол = книга - букид - автор - название

таблица = категории книги - букид - categoryid

таблица = категория - CategoryID - категорияdesc

Когда я присоединяюсь к таблицам с помощью;

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 ]

3 голосов
/ 11 июня 2011

Простой, используйте группу по 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

0 голосов
/ 11 июня 2011

Хорошо, при условии, что вам нужна только одна запись на книгу, что вы хотите первую категорию, а 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, которое, по сути, будет вторым оператором выбора, где вы извлекаете самый низкий CategoryId для каждой отдельной книги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...