SELECT之后一次SQL更新多个行

时间:2018-08-26 01:04:25

标签: mysql sql

我的样品表:

+------------+------------+------+-----+---------+-------+
| Field      | Type       | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| id         | bigint(20) | YES  |     | NULL    |       |
| other_id   | bigint(20) | YES  |     | NULL    |       |
| another_id | bigint(20) | YES  |     | NULL    |       |
+------------+------------+------+-----+---------+-------+

+------+----------+------------+
| id   | other_id | another_id |
+------+----------+------------+
|  988 |      102 |       NULL |
|  989 |      103 |       NULL |
|  990 |      104 |       NULL |
|  991 |      105 |       NULL |
|  992 |      106 |       NULL |
|  987 |      101 |       NULL |
+------+----------+------------+

我如何在一个查询中选择和更新上表,以达到对每一行执行以下操作的作用:

UPDATE
    x
SET 
    another_id = 987
WHERE
    id = 987
    AND other_id = 101;
UPDATE
    x
SET 
    another_id = 988
WHERE
    id = 988
    AND other_id = 102

我不愿意为每一行运行这样的手动更新,并且希望一次完成所有操作。

2 个答案:

答案 0 :(得分:1)

在我看来,您似乎只想将another_id的值设置为id

UPDATE
    x
SET 
    another_id = id

如果需要限制更新的行数,则可以在where子句中提供other_id值范围:

UPDATE
    x
SET 
    another_id = id
WHERE other_id IN (...) --list the values you want here.

答案 1 :(得分:0)

阴影在他的更新语句中是正确的。您似乎想将所有ID直接携带到ANOTHER_ID中。如果只希望在“ Other_ID”是给定范围的情况下发生这种情况,只需添加“ 101和21234之间的where other_id”或您希望它发生的任何范围。

要查看Shadow的答案将导致的结果,请将其更改为简单的SELECT语句以查看。如果正确,请更改为更新版本。例子...

Select
      ID,
      ID AS Another_ID,
      Other_ID
   from
      YourTable

您将获得所有记录,其中显示两列的ID为“ Another_ID”。它不会更新“ Another_ID”列,只是查询值AS的结果列名称。同样,如果您只需要一定范围的数字,只需添加

   where Other_ID between 101 and 21234

(或任何值范围)

现在,将其视为UPDATE命令与Shadow TRIED完全相同。

update YourTable set
      AnotherID = ID

所有记录都将更新...如果在特定范围内...请使用与Select相同的where子句。

如果您想在不破坏生产数据的情况下尝试此操作,请使用临时的伪造表,完成后始终可以将其删除。

insert into MyTempTable 
   ( ID, 
     Another_ID, 
     Other_ID 
   ) 
   select ID, Another_ID, Other_ID
      From YourTable
      where ID between 500 and 800

现在您有一个测试表可与插入表一起使用,并查看其影响...