+------+------+ | id | no | +------+------+ | 1 | 1 | | 11 | 1 | | 21 | 1 | +------+------+
我想更新第二行。到2。我可以使用的查询是
update test set no = 2 where id = 11;
没有where子句,我怎么能达到相同的效果?
要更新表格中的“第二”行,该行具有第二个最小的id值…
UPDATE test t JOIN ( SELECT r.id FROM test r ORDER BY r.id LIMIT 1,1 ) s ON s.id = t.id SET t.no = 2
编辑
作为澄清上述查询结果的后续措施…
在id表中不唯一的情况下,查询可能会更新 多个 行。s在按ID值对行进行排序之后,内联视图查询()从“第二”行获取ID值。然后将更新具有相同id值的 所有 行。
id
s
这是一个问题,只有id是 不是 唯一的; 如果id是唯一的,则该语句将(最多)更新一行。
例如,如果表的内容是:
+-----+-----+ | id | no | +-----+-----+ | 1 | 1 | | 11 | 3 | <-- "second" row, ordered by id ascending | 11 | 4 | <-- id from third row matches id from second row | 21 | 1 | +-----+-----+
上面查询的结果将是更新值为的 两 行。id``11
id``11
+-----+-----+ | id | no | +-----+-----+ | 1 | 1 | | 11 | 2 | <-- updated | 11 | 2 | <-- updated | 21 | 1 | +-----+-----+