簡體   English   中英

SQL將兩個查詢合並為一個

[英]SQL combine two queries into one

這些是我擁有的三個表的簡化版本:

Books
BookID (PK)
AuthorID
...


Purchases
PurchaseID (PK)
CustomerID
BookID
Date
...

Authors 
AuthorID (PK)
Name
...

我希望表格之間的聯系是可以自我解釋的,但我會做一個簡短的解釋:作者與書籍之間以及書籍與購買之間存在一對多的關系。

現在,我想從給定作者撰寫的書籍中選擇一本書,並且購買次數超過X次。

我可以查詢給定作者的書籍:

SELECT * FROM Books where AuthorID = 'some author';

但是我只希望購買的書籍超過X次。

   SELECT BookID from Purchases WHERE ...(where the occurance of BookID>X)

我不知道如何完成此查詢,甚至是不可能的。 然后,如果可能的話,我想使用INNER JOIN將其與第一個查詢合並。

我願意接受該設計存在缺陷。 也許“購買”表應該僅具有BookID作為PK,並具有用於購買次數的字段。

LEFT JOIN將允許顯示記錄,即使尚未購買也是如此。 totalSold的值為0。

SELECT  a.BookID,
        b.Name,
        COUNT(c.BookID) totalSold
FROM    Books a
        INNER JOIN Authors b
            ON a.authorID = b.AuthorID
        LEFT JOIN   Purcahses c 
            ON a.BookID = c.BookID
WHERE   b.Name = 'AuthorName'
GROUP   BY a.BookID, b.Name
HAVING  COUNT(c.BookID) >= x -- <<== where X is the number of purchase

要進一步獲得有關聯接的知識,請訪問以下鏈接:

SELECT * FROM
Books INNER JOIN Purchases USING (BookID) 
WHERE AuthorID = ? 
GROUP BY BookID 
HAVING COUNT(BookID) > ?;
SELECT b.*, a.Name as author_name
FROM Books b
INNER JOIN Authors a ON (a.AuthorId = b.AuthorId)
INNER JOIN 
(
SELECT BookID
--if you also want to include number of purchases to resultset, 
-- uncomment the line below
-- ,count(1) as cnt
from Purchases 
GROUP BY BookID
HAVING count(1) > x
)c ON (c.BookID = b.BookID)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM