【问题标题】:How to update a column twice with sql如何用sql更新一列两次
【发布时间】:2017-06-16 09:31:03
【问题描述】:

我有一个包含这些值的表:

Name       |  id
----------------
Blue guy   |  20
Green girl |  10

id 列是唯一值。我想要的是将蓝色家伙 id 更新为 10,并且在同一个查询中我想将绿色女孩 id 更新为 20。我当前的 SQL 查询是:

UPDATE colorpeople SET id = 20
WHERE name = 'Blue guy';

我在哪里可以指定将绿色女孩更新到?

【问题讨论】:

  • 看看这个问题和接受的答案:stackoverflow.com/questions/20255138/…
  • 从逻辑上讲,它是两个更新语句,因为它是两个不同的值,附加了不同的条件。但是您可以根据上面给出的链接将它组合成一个语句。但是,它实际上只能扩展到两个或三个值,如果您需要为大量行执行此操作,它将变得笨拙。
  • 通常,这种事情是在一个 3 步事务中完成的 - 1. 将 20 更新为 x。 2. 将 10 更新为 20。 3. 将 x 更新为 10。

标签: mysql sql


【解决方案1】:

试试这个:

UPDATE colorpeople 
SET id = (case 
           when name = 'Blue guy' then 10   
           when name = 'Green girl' then 20 
           else id = id 
           end)

【讨论】:

    【解决方案2】:

    请尝试以下脚本:

    ALTER TABLE colorpeople DROP CONSTRAINT PK_colorpeople
    
    UPDATE colorpeople SET ID = 10 WHERE Name = 'Blue guy'
    UPDATE colorpeople SET ID = 20 WHERE Name = 'Green girl'
    
    ALTER TABLE colorpeople ADD CONSTRAINT PK_colorpeople PRIMARY KEY /* CLUSTERED */ (ID)
    

    【讨论】:

      【解决方案3】:

      你应该试试这样的:

      INSERT INTO colorpeople id VALUES 10, 20
      ON DUPLICATE KEY UPDATE id=VALUES(id);
      

      【讨论】:

        【解决方案4】:

        最好的方法是使用WHERE 子句:

        UPDATE colorpeople 
            SET id = (case when name = 'Blue guy' then 10
                           when name = 'Green girl' then 20
                      end)
            WHERE name in ('Blue guy', 'Green girl');
        

        【讨论】:

          【解决方案5】:

          如果你想更新一个已经存在的唯一键

          UPDATE colorpeople SET id = -20 WHERE naam = 'Blue guy';
          UPDATE colorpeople SET id = -10 WHERE naam = 'Green girl';
          UPDATE colorpeople SET id = -id WHERE naam in ('Blue guy', 'Green girl');
          

          【讨论】:

            猜你喜欢
            • 2011-11-11
            • 1970-01-01
            • 1970-01-01
            • 2023-04-09
            • 1970-01-01
            • 1970-01-01
            • 2016-06-04
            • 1970-01-01
            • 2017-07-10
            相关资源
            最近更新 更多