[英]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.