SQL - 如何选择多行

had*_*enp 5 mysql sql

我有两个表,会员和捐款由会员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
Run Code Online (Sandbox Code Playgroud)

sge*_*des 3

如果我正确理解您的问题,您希望将您的捐赠表更新为与会员关联的最大 ID,并删除会员表中的重复记录以保留最大 ID。

如果是这样,那么这应该可以工作——但是,您不应该有 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;
Run Code Online (Sandbox Code Playgroud)

SQL 小提琴演示

发表您的评论,也许您只是在寻找 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;
Run Code Online (Sandbox Code Playgroud)

更新的小提琴