【发布时间】:2017-03-08 20:27:07
【问题描述】:
我正在查询所有书籍。每本书都有许多作者和许多出版商。 (作者和出版商也可以属于许多书籍。)这是我的数据表模式:
CREATE TABLE book (`id` int, `name` varchar(55));
CREATE TABLE author (`id` int, `name` varchar(55));
CREATE TABLE publisher (`id` int, `name` varchar(55));
CREATE TABLE book_author (`book_id` int, `author_id` int);
CREATE TABLE book_publisher (`book_id` int, `publisher_id` int);
这是我的查询:
SELECT book.title
, GROUP_CONCAT(author.id SEPARATOR ';') AS authors
, GROUP_CONCAT(publisher.id SEPARATOR ';') AS publishers
FROM book
LEFT JOIN book_author ON book.id = book_author.book_id
LEFT JOIN author ON book_author.author_id = author.id
LEFT JOIN book_publisher ON book.id = book_publisher.book_id
LEFT JOIN publisher ON book_publisher.publisher_id = publisher.id
GROUP BY book.id
具有 1 个作者和 1 个出版商的图书将返回作者 ID 两次。一本有 5 个作者和 1 个出版商的书将返回两次作者 ID(例如:1,1,2,2,3,3,4,4,5,5)。关于如何防止作者和出版商重复的任何想法?
【问题讨论】:
-
呃,不会的。但是一本有两个出版商的书会
标签: mysql