[英]SQL - How to select multiple rows
我有两个表,会员和捐款由会员ID链接。 成员有很多重复。 我想删除它们,但在此之前,我想将捐赠中的成员条目更新为单个ID - 在Sara Tam的情况下可能是MAX值(456)。
是否有一个查询选择所有Sara的成员(以及其他在捐赠中有条目但没有Fred的人没有?我如何关联ID 123和456?
members donations
----------- -----------
123 Sara Tam 123 20.00
456 Sara Tam 123 40.00
789 Sara Tam 333 10.00
. 444 30.00
. 999 30.00
789 Fred Foo
如果我正确理解您的问题,您希望将您的Donations表更新为与成员关联的MAX Id,并删除Members表中保留MAX的重复记录。
如果是这样,那么这应该有效 - 但是,你不应该有2个具有相同id的成员:
UPDATE Donations D
JOIN Members M ON M.MemberId = D.MemberId
JOIN (SELECT Max(MemberId) MaxId, Name
FROM Members
GROUP BY Name
) M2 ON M.Name = M2.Name
SET D.MemberId = M2.MaxId;
DELETE M
FROM Members M
JOIN Members M2 ON M.Name = M2.Name AND M.MemberId < M2.MemberId;
发表您的意见,也许您只是在寻找SQL语句来显示更新的捐赠与MAX(Id)。 如果是这样,那么这应该工作:
SELECT M2.MaxId MemberId, D.Amount
FROM Donations D
JOIN Members M ON M.MemberId = D.MemberId
JOIN (SELECT Max(MemberId) MaxId, Name
FROM Members
GROUP BY Name
) M2 ON M.Name = M2.Name;
这将找到所有额外重复ID的最大成员ID:
select m1.member_id, max(m2.member_id) maxid
from members m1
join members m2 on m1.name = m2.name and m1.member_id < m2.member_id
要将其限制为仅在捐赠中的用户:
select m1.member_id, max(m2.member_id) maxid, count(*) duplicates
from members m1
join (select distinct member_id from donations) d on m1.member_id = d.member_id
join members m2 on m1.name = m2.name and m1.member_id < m2.member_id
having duplicates > 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.