MySQL:如何从两个表中获取结果而不重复?
MySQL:如何从两个表中获取结果而不重复?
我有三个表:书籍、出版商和书籍类别。\n对于特定的书籍类别(奇幻),我需要显示供应该类别的出版商名称列表。\n出版商名称和类别名称通过书籍表关联,所以我的查询语句是:\n
SELECT publisher.publisher_name FROM publisher, book, book_category WHERE publisher.publisher_id = book.publisher_id AND book.category_id = book_category.category_id AND category_name = '奇幻';
\n但是我得到的结果是,如果同一个出版商提供了多本奇幻书籍,出版商的名称会重复出现。\n假设我有《霍比特人》和《指环王》,两者都是奇幻类书籍,由同一家出版商A提供。\n在这种情况下,我的查询结果是:\n
出版商A 出版商A
\n是否有可能只得到一次这样的结果?即使同一出版商有多于两本奇幻书籍发行?
问题的原因是查询结果中出现了重复的结果,需要找到一种方法来去除重复的结果。
解决方法是在查询语句的末尾添加 "GROUP BY" 子句,并指定需要按照哪个字段进行分组,以去除重复的结果。
以下是一个示例:
SELECT book.book_title, publisher.publisher_name
FROM book
INNER JOIN publisher ON book.publisher_id = publisher.publisher_id
GROUP BY publisher.publisher_name;
上述查询语句将从两个表(book和publisher)中获取结果,并按照出版商名称(publisher_name)进行分组,以去除重复的结果。
问题原因:在从两个表中获取结果时,可能会出现结果重复的情况。
解决方法:使用DISTINCT关键字进行去重操作。
具体代码如下:
SELECT DISTINCT publisher.publisher_name FROM publisher, book, book_category WHERE publisher.publisher_id = book.publisher_id AND book.category_id = book_category.category_id AND category_name = 'fantasy';
该代码可以通过连接三个表,根据条件获取publisher_name,并使用DISTINCT关键字确保结果中没有重复的publisher_name。
MySQL中如何从两个表中获取结果而不重复的问题?
如果只需要publisher_name,则可以使用distinct关键字。
SELECT distinct publisher.publisher_name
另外,建议使用JOIN语法来连接表。
SELECT distinct p.publisher_name FROM publisher p join book b on b.publisher_id = p.publisher_id join book_Category bc on bc.category_id = b.category_id where bc.category_name = 'fantasy'