【发布时间】:2021-08-10 19:58:46
【问题描述】:
如何在连接多个表的查询中选择具有另一列最大值的行的 ID?
例如,假设我有三张桌子。 tblAccount 存储一组用户,就像一个家庭。 tblUser 存储用户,每个用户都绑定到来自 tblAccount 的记录。每个用户都可以成为计划的一部分,存储在tblPlans。每个计划都有一个Rank 列,用于在比较计划级别时确定它的排序。例如,Lite 低于 Premium。所以想法是每个用户都可以有一个单独的计划,例如高级版、基本版、精简版等...,但父帐户没有计划。
如何通过一次查询确定账户中的最高计划?
tblAccount
| PKID | Name |
|---|---|
| 1 | Adams Family |
| 2 | Cool Family |
tblUsers
| PKID | Name | AccountID | PlanID |
|---|---|---|---|
| 1 | Bob | 1 | 3 |
| 2 | Phil | 2 | 2 |
| 3 | Suzie | 2 | 1 |
tblPlans
| PKID | Name | Rank |
|---|---|---|
| 1 | Premium | 3 |
| 2 | Basic | 2 |
| 3 | Elite | 4 |
| 4 | Lite | 1 |
这是我希望产生的结果:
| AccountID | Name | HighestPlanID | PlanName |
|---|---|---|---|
| 2 | Adams Family | 1 | Premium |
我试过了:
SELECT U.AccountID, A.Name, MAX(P.Rank) AS Rank, P.PKID as HighestPlanID, P.Name as PlanName
FROM tblPlans P
INNER JOIN tblUsers U ON U.PlanID = P.PKID
INNER JOIN tblAccounts A ON U.AccountID = A.PKID
WHERE U.AccountID = 2
并且查询并不总是有效,选择 Rank 的 MAX 不会从 tblPlans 中选择整行的值。
我正在寻找与mysql-5.6.10兼容的解决方案
【问题讨论】:
-
@bill-karwin - 在查看
Retrieving the last record in each group - MySQL之后,我相信我的问题有点不同,因为它涉及多个表。链接问题中的答案解释了在同一张桌子上加入,我不能在这里做 -
我已经重新提出了这个问题,但我建议即使对于连接表,该技术也是相同的。关注greatest-n-per-group标签,这种一般类型的问题已经被问过很多次了,毫无疑问有一个涉及联表的案例。
标签: mysql greatest-n-per-group