Android 如何使用相同的值更新多行(从不更新行)?
我的表Android 如何使用相同的值更新多行(从不更新行)?,android,sqlite,Android,Sqlite,我的表tbl1如下所示(): 我的要求是从用户那里获得每列的正数,如果某列的行数为零,我需要更新该列的行数,最后我应该计算更新的行数,以及用户输入与我应该添加到最后一行的更新计数之间的差值 让我举例说明: 假设col1的用户输入为10。col1有3行包含零,所以我将把它们更新为1,最后在最后一行更新diff,即(10-3=7) 更新后,我希望表如下所示: id col1 col2 col3 1 1 1 0 2 1 0 0 3
tbl1
如下所示():
我的要求是从用户那里获得每列的正数,如果某列的行数为零,我需要更新该列的行数,最后我应该计算更新的行数,以及用户输入与我应该添加到最后一行的更新计数之间的差值
让我举例说明:假设col1的用户输入为10。col1有3行包含零,所以我将把它们更新为1,最后在最后一行更新diff,即(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
上面的查询将所有0更新为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)
要确保一致性,请在一次完成所有操作。要完成任务,我将使用两个更新查询。第一个是您已有的查询:
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
是从第一个更新查询返回的内容)
我希望这能有所帮助。如果你想要SqlLite,为什么要用“Sql Server”作为标记?如果有人帮助使用SQLite,那就太好了,但是如果有人也给我Sql Server查询,我也没问题,我有了这个想法,然后我会尝试自己编写感谢这个解决方案,我会尝试这个并更新。。感谢指向transactionSELECT MAX(id)的指针。与按id排序相比,从表中选择MAX(id)可能更快
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;