mysql 内连接最大值
mysql inner join max
我需要你的帮助来处理内部连接和最大值。我已经研究了其他问题,但我无法解决...
我有三个表:
- 成员(member_id,姓名)
- 位置(location_id、姓名、顺序)
- member_location (id, member_id, location_id)
我只需要 select 来自 member_location 的记录,最高顺序组为 member_location.memberId。
示例:
Member
1, Jack Sparrow
Location
1, Mexico, 2
2, Punta Cana, 3
3, Cuba, 1
member_location
1, 1, 3
1, 1, 2
1, 1, 1
在 member_location 我有同一个成员的 3 条记录,我的查询需要得到 member_location 的第二行 (1, 1, 2) 因为位置 2 的顺序是最伟大的.
我试试:
select ml.memberId, ml.locationId, max(l.order)
from member_location ml inner join
location l
on ml.locationId=l.id
group by ml.memberId;
result: 1,1,3 -顺序没问题但是locationId没有。
我也试试:
select ml.locationId, ml.memberId
from member_location ml inner join
(select id, max(order) from location) l
on ml.locationId = l.id
group by ml.memberId;
在响应中我收到了第一个位置的记录。
我想也许这就是你想要的:
select ml.memberId, ml.locationid
from member_location ml
inner join location l on ml.locationId = l.id
where l.order = (
select max(order) max_order
from location
join member_location on location.id = member_location.locationid
where member_location.memberid = ml.memberid
)
这将获得任何用户订单最高的位置;不限于一个。相关子查询确保 max(order) 仅应用于与用户相关的位置集(没有相关性,max(order) 可能是特定用户 member_locations 不包括的位置) .
如果您只需要特定用户的数据,您可以在查询末尾添加 where ml.memberId = ?
。
如果你只想往后一排,你可以使用order by
和limit
:
select ml.memberId, ml.locationId
from member_location ml inner join
location l
on ml.locationId=l.id
order by l.order desc
limit 1;
我需要你的帮助来处理内部连接和最大值。我已经研究了其他问题,但我无法解决...
我有三个表:
- 成员(member_id,姓名)
- 位置(location_id、姓名、顺序)
- member_location (id, member_id, location_id)
我只需要 select 来自 member_location 的记录,最高顺序组为 member_location.memberId。
示例:
Member
1, Jack Sparrow
Location
1, Mexico, 2
2, Punta Cana, 3
3, Cuba, 1
member_location
1, 1, 3
1, 1, 2
1, 1, 1
在 member_location 我有同一个成员的 3 条记录,我的查询需要得到 member_location 的第二行 (1, 1, 2) 因为位置 2 的顺序是最伟大的.
我试试:
select ml.memberId, ml.locationId, max(l.order)
from member_location ml inner join
location l
on ml.locationId=l.id
group by ml.memberId;
result: 1,1,3 -顺序没问题但是locationId没有。
我也试试:
select ml.locationId, ml.memberId
from member_location ml inner join
(select id, max(order) from location) l
on ml.locationId = l.id
group by ml.memberId;
在响应中我收到了第一个位置的记录。
我想也许这就是你想要的:
select ml.memberId, ml.locationid
from member_location ml
inner join location l on ml.locationId = l.id
where l.order = (
select max(order) max_order
from location
join member_location on location.id = member_location.locationid
where member_location.memberid = ml.memberid
)
这将获得任何用户订单最高的位置;不限于一个。相关子查询确保 max(order) 仅应用于与用户相关的位置集(没有相关性,max(order) 可能是特定用户 member_locations 不包括的位置) .
如果您只需要特定用户的数据,您可以在查询末尾添加 where ml.memberId = ?
。
如果你只想往后一排,你可以使用order by
和limit
:
select ml.memberId, ml.locationId
from member_location ml inner join
location l
on ml.locationId=l.id
order by l.order desc
limit 1;