2017-04-01 17 views
1

我不知道如何說這個,所以這個問題可能看起來模糊。我會盡我所能來描述我遇到的問題。MYSQL - 如何去做一個加入與子選擇加入

我有3個表:

LibraryRepairEvent 
MemberBorrowsBook 
Book 

這是LibraryRepairEvent的樣子:

LibraryRepairEvent

這是MemberBorrowsBook的樣子:

MemberBorrowsBook

這是如何博OK的樣子:

Book

我所試圖做的是在那裏所有的事件,我想找到誰提出的最捐款組織者並獲取從書籍表方面的一些信息。

這是我到目前爲止有:

SELECT * 
FROM Book bk 
JOIN (SELECT b.bookID, SUM(lre.donationsCollected) as maxDonations 
FROM Book b 
    JOIN MemberBorrowsBook mbb 
      ON b.bookID = mbb.bookID 
    LEFT JOIN LibraryRepairEvent lre 
      ON mbb.memberID = lre.organiserID 
) a 
ON bk.bookID = a.bookID 
GROUP BY maxDonations 
ORDER BY maxDonations DESC 

但此查詢不作爲應該如何工作。基於我已經包含的截圖。它返回錯誤的信息。

基於該示例,LibraryRepairEvent顯示organiserId [email protected]籌集的金額最高(合計900的捐款)。現在,它將通過使用memberID上的聯接來查看MemberBorrowsBook表以獲取bookID。所以在這裏,我將有45441和45651作爲bookID,然後將被帶到Book表。所以現在最終的結果應該是這些ID的細節,但我收到了錯誤的數據。

請問我是否不確定任何事情。

+0

你的'group by'看起來不對我 – Rahul

+0

預期結果是什麼? –

+0

我的理解正確嗎?你想找到最「成功」的活動組織者借的書嗎? [有點奇怪的要求,是不是?] –

回答

1

我認爲這應該做。相應地選擇你的列。 我在這裏設置了rextester demo,如果你自己這樣做,它會幫助我們很多。也許下一次:-)

select * from 
(
    select OrganiserID, sum(DonationsCollected) totalDonations from LibraryRepairEvent group by OrganiserID 
) summary 
join MemberBorrowsBook mbb on mbb.MemberID = summary.OrganiserID 
join Book b on mbb.BookID = b.BookID 
where totalDonations = (
    select max(totalDonations) from 
    (
     select sum(DonationsCollected) totalDonations from LibraryRepairEvent group by OrganiserID 
    ) summary2 
) 
; 

注意該語句返回與所有等級1組織者的信息。所以如果有不止一個人獲得最高的捐款總額,他們都會被報告。如果你只想要其中的一個,這個陳述可以被大大簡化。