2017-04-01 84 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组织者的信息。所以如果有不止一个人获得最高的捐款总额,他们都会被报告。如果你只想要其中的一个,这个陈述可以被大大简化。