我的表tbl1
看起来像这样(SQLFiddle):
id col1 col2 col3
1 0 1 0
2 1 0 0
3 0 0 1
4 1 1 1
5 0 0 0
我的要求是我从每个列的用户那里得到一些正数,如果它们包含零,我需要更新特定列的行,最后我应该计算更新的行数和它们之间的差异。用户输入和我应该添加到最后一行的更新计数。
让我用例子解释一下:
假设用户输入10作为col1。 col1有3行包含零,所以我将它们更新为1,最后差异即(10 - 3 = 7)我应该在最后一行更新。
更新后,我希望该表看起来像这样:
id col1 col2 col3
1 1 1 0
2 1 0 0
3 1 0 1
4 1 1 1
5 8 0 0
update tbl1 set col1=1 where id in (select id from tbl1 where col1=0 limit 10)
以上查询将所有0更新为1,但如何将剩余部分添加到最后一行?
答案 0 :(得分:1)
要完成任务,我会使用2个更新查询。第一个是你已经拥有的查询:
UPDATE tbl1 SET col1=1 WHERE id IN (SELECT id FROM tbl1 WHERE col1=0 LIMIT 10);
我会将第一个更新查询的结果保存在变量中(因为它返回受影响的行数),并在下一个查询中使用该结果:
UPDATE tbl1 SET col1 = col1+updateResult ORDER BY id DESC LIMIT 1;
(updateResult
是第一次更新查询返回的内容。)
我希望这会有所帮助。
答案 1 :(得分:0)
首先,找出要更新的行数:
SELECT COUNT(*)
FROM tbl1
WHERE id IN (SELECT id
FROM tbl1
WHERE col1 = 0
LIMIT 10)
更新那些:
UPDATE tbl1
SET col1 = 1
WHERE id IN (SELECT id
FROM tbl1
WHERE col1 = 0
ORDER BY id
LIMIT 10)
(如果没有ORDER BY,则会更新一些随机的十行行。)
然后更新最后一行:
UPDATE tbl1
SET col1 = col1 + (10 - ResultFromAbove)
WHERE id = (SELECT MAX(id)
FROM tbl1)
为确保一致性,请在一个transaction中执行所有操作。