sql选择后一次更新多行

juud5qan  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(358)

我的样本表:

+------------+------------+------+-----+---------+-------+
| 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

我不想对每一行运行这样的手动更新,我想一次完成所有更新。

0kjbasz6

0kjbasz61#

shadow的update语句是正确的。看起来您希望将所有id直接带入另一个\u id。如果您只希望在“其他\u id”是给定范围的情况下发生这种情况,只需添加“where other \u id between 101 and 21234”或任何您希望发生这种情况的范围。
要查看shadow的答案的结果,请将其更改为一个简单的select语句。如果正确,请更改为更新版本。例子。。。

Select
      ID,
      ID AS Another_ID,
      Other_ID
   from
      YourTable

您将获得显示两列的所有记录,这两列将id显示为“另一个\u id”。它不更新“another\u id”列,只查询作为结果列名的值。再说一次,如果你只需要一定范围的数字,只要加上

where Other_ID between 101 and 21234

(或任何值范围)
现在,将其视为更新命令正是shadow试图解释的。。

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

现在您有了一个测试表来使用insert表并查看其影响。。。

jucafojl

jucafojl2#

在我看来,你只是想设定 another_idid :

UPDATE
    x
SET 
    another_id = id

您可以提供一系列 other_id 如果需要限制更新的行数,请在where子句中输入以下值:

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

相关问题