MYSQL - 如何使用subselect join进行连接

时间:2017-04-01 09:35:39

标签: php mysql

我不知道怎么说这个,所以这个问题可能看起来很模糊。我会尽力描述我遇到的问题。

我有3张桌子:

LibraryRepairEvent
MemberBorrowsBook
Book

这就是LibraryRepairEvent的样子:

LibraryRepairEvent

这就是MemberBorrowsBook的样子:

MemberBorrowsBook

这就是Book的样子:

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 jessicaalba@gmail.com筹集的金额最高(累计捐款900)。现在,它将使用memberID上的join来查看MemberBorrowsBook表以获取bookID。所以这里我将把45441和45651作为bookID,然后将其带到Book表。所以现在最终的结果应该是这些ID的详细信息,但我收到了错误的数据。

请问我是否不确定。

1 个答案:

答案 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
)
;

注意此语句返回与所有rank-1组织者相关的信息。因此,如果有多个人获得最高捐款额,则会报告所有捐款额。如果你只想要其中一个,这个陈述可以大大简化。

相关问题