Mysql 两个结果集如何相交?
我有两个表Mysql 两个结果集如何相交?,mysql,resultset,Mysql,Resultset,我有两个表library和book,如这两个块所示 bookid title author publisher 0 ABC Abc abc 1 DEF Def def 2 GHI Ghi abc 3 ... ... ... id discount price 0 50 8 1 75 6 2
library
和book
,如这两个块所示
bookid title author publisher
0 ABC Abc abc
1 DEF Def def
2 GHI Ghi abc
3 ... ... ...
id discount price
0 50 8
1 75 6
2 33 10
3 .. ..
我需要选择每个作者的作品,价格和折扣出版商至少有2个标题,但不超过9。
第一个查询可能是
SELECT title, author, publisher, price, discount FROM library, book
这显然是在返回所有数据。第二个查询可能是
SELECT publisher FROM library GROUP BY publisher
HAVING COUNT(bookid) > 2 AND COUNT(bookid) < 9
它工作得很好,但在100条记录上速度非常慢,当有1000多条记录时,它根本不工作。如何优化我的查询?
提前感谢这基本上是您的问题:
SELECT l.title, l.author, l.publisher, b.price, b.discount
FROM library l LEFT JOIN
book b
ON l.bookid = b.id
WHERE l.publisher IN (SELECT l.publisher
FROM library l
GROUP BY l.publisher
HAVING COUNT(*) < 9 AND COUNT(*) > 3
)
ORDER BY l.publisher ASC;
那么,我认为这些索引可能会帮助
图书(id)
,图书馆(出版商,图书id)
,如果一本书有多个作者呢?非常感谢。它工作得很好。你是我的英雄!:)
Title Author Publisher Price Discount
ABC Abc abc 8 ...
GHI Ghi abc 10 ...
... ... def 11 ...
... ... def 11 ...
... ... def 9 ...
SELECT l.title, l.author, l.publisher, b.price, b.discount
FROM library l LEFT JOIN
book b
ON l.bookid = b.id
WHERE l.publisher IN (SELECT l.publisher
FROM library l
GROUP BY l.publisher
HAVING COUNT(*) < 9 AND COUNT(*) > 3
)
ORDER BY l.publisher ASC;
SELECT l.title, l.author, l.publisher, b.price, b.discount
FROM library l LEFT JOIN
book b
ON l.bookid = b.id JOIN
(SELECT l.publisher
FROM library l
GROUP BY l.publisher
HAVING COUNT(*) < 9 AND COUNT(*) > 3
) ll
ON l.publisher = ll.publisher
ORDER BY l.publisher ASC;