Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 两个结果集如何相交?_Mysql_Resultset - Fatal编程技术网

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;