繁体   English   中英

SQL-根据多个条件更新表中的行

[英]SQL - Updating rows in table based on multiple conditions

我是SQL的新手,我必须创建一个请求以根据多种条件更新表中的多行。

从这个例子:

id email                 organisationid    principaluserid role
1  john@smith.com        MULT              null            100
2  john@smith.C-100.com  C-100             1               25
3  john@doe.com          MULT              null            100
4  john@doe.C-101.com    C-101             3               50
5  john@doe.C-102.com    C-102             3               25
6  jessica@smith.com     C-102             null            25

目标是更新“用户”表中的所有条目,其中organizationalid等于“ MULT”,并且只有1个principleuseruserid匹配项。

在上面的示例中,前2个条目符合我的条件。 然后,我需要将id = 2电子邮件(john@smith.C-100.com)替换为id = 1电子邮件(john@smith.com)的电子邮件。

为了逐步完成这项工作,我尝试通过此请求检索所有符合我的条件的条目:

从@The_impaler答案编辑:

SELECT * FROM User a1 WHERE a1.organisationid = 'MULT' AND (
 SELECT COUNT(*) FROM User a2 WHERE a2.principaluserid = a1.id
) = 1;

但是我仍然在更新条目的方式上遇到麻烦。 任何帮助表示赞赏!

如果我理解正确,那么update应该可以解决问题:

update user u
    set u.email = um.email
    from user um
    where um.id = u.principaluserid and
          um.organizationid = 'MULT' and
          not exists (select 1
                      from user up2
                      where up2.principaluserid = u.principaluserid and
                            up2.id <> u.id
                     );

您可以使用基于加入的更新

UPDATE user u1
SET u1.email =  u2.email
FROM user u2 
WHERE u2.organisationid = 'MULT' 
       AND u1.id = u2.principaluserid 

如果您只需要具有一个principaluserid的值,则可以使用

UPDATE user u1
  SET u1.email =  u2.email
FROM user u2 
INNER JOIN 
(
      select principaluserid , count(*)
      from user 
      group by principaluserid 
      having count(*) =1
    ) t2 ON t2.principaluserid = u2.principaluserid 
    AND  u2.organisationid = 'MULT' 
      AND u1.id = u2.principaluserid 

根据@The_impaler的建议,我进行了以下查询,似乎可以满足我的需要:

UPDATE user u1 
  SET organisationid = (SELECT u2.organisationid FROM user u2 WHERE u1.id = u2.principaluserid),
  WHERE u1.organisationid = 'MULT' AND 
(SELECT COUNT(*) FROM user u2 WHERE u2.principaluserid = u1.id) = 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM