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;