sql选择后一次更新多行

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

我的样本表:

  1. +------------+------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +------------+------------+------+-----+---------+-------+
  4. | id | bigint(20) | YES | | NULL | |
  5. | other_id | bigint(20) | YES | | NULL | |
  6. | another_id | bigint(20) | YES | | NULL | |
  7. +------------+------------+------+-----+---------+-------+
  8. +------+----------+------------+
  9. | id | other_id | another_id |
  10. +------+----------+------------+
  11. | 988 | 102 | NULL |
  12. | 989 | 103 | NULL |
  13. | 990 | 104 | NULL |
  14. | 991 | 105 | NULL |
  15. | 992 | 106 | NULL |
  16. | 987 | 101 | NULL |
  17. +------+----------+------------+

如何在一个查询中选择并更新上表,从而对每一行执行类似操作:

  1. UPDATE
  2. x
  3. SET
  4. another_id = 987
  5. WHERE
  6. id = 987
  7. AND other_id = 101;
  8. UPDATE
  9. x
  10. SET
  11. another_id = 988
  12. WHERE
  13. id = 988
  14. AND other_id = 102

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

83qze16e

83qze16e1#

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

  1. UPDATE
  2. x
  3. SET
  4. another_id = id

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

  1. UPDATE
  2. x
  3. SET
  4. another_id = id
  5. WHERE other_id IN (...) --list the values you want here.
qvtsj1bj

qvtsj1bj2#

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

  1. Select
  2. ID,
  3. ID AS Another_ID,
  4. Other_ID
  5. from
  6. YourTable

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

  1. where Other_ID between 101 and 21234

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

  1. update YourTable set
  2. AnotherID = ID

所有记录都会更新。。。如果在特定范围内。。。使用与select相同的where子句。
如果您想在不弄乱生产数据的情况下尝试此操作,请使用一个临时的伪表,您可以在完成后随时删除它。。

  1. insert into MyTempTable
  2. ( ID,
  3. Another_ID,
  4. Other_ID
  5. )
  6. select ID, Another_ID, Other_ID
  7. From YourTable
  8. where ID between 500 and 800

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

展开查看全部

相关问题