我的样本表:
+------------+------------+------+-----+---------+-------+
| 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条答案
按热度按时间0kjbasz61#
shadow的update语句是正确的。看起来您希望将所有id直接带入另一个\u id。如果您只希望在“其他\u id”是给定范围的情况下发生这种情况,只需添加“where other \u id between 101 and 21234”或任何您希望发生这种情况的范围。
要查看shadow的答案的结果,请将其更改为一个简单的select语句。如果正确,请更改为更新版本。例子。。。
您将获得显示两列的所有记录,这两列将id显示为“另一个\u id”。它不更新“another\u id”列,只查询作为结果列名的值。再说一次,如果你只需要一定范围的数字,只要加上
(或任何值范围)
现在,将其视为更新命令正是shadow试图解释的。。
所有记录都会更新。。。如果在特定范围内。。。使用与select相同的where子句。
如果您想在不弄乱生产数据的情况下尝试此操作,请使用一个临时的伪表,您可以在完成后随时删除它。。
现在您有了一个测试表来使用insert表并查看其影响。。。
jucafojl2#
在我看来,你只是想设定
another_id
至id
:您可以提供一系列
other_id
如果需要限制更新的行数,请在where子句中输入以下值: