SQLite:如何使用计数(*)范围更新列?
SQLite: How to UPDATE column using count(*) range?
我不确定我在这里使用的术语是否正确。
基本上我想使用 count(*) [485] 作为分隔符按升序更新整个“id”列,因此生成的行值将与 rownumber(而不是 rowid)相对应。
试试这个:http://www.sqlite.org/lang_createtable.html#rowid
您可以使用一些内部数据库变量,例如 rowid、oid 等来获取您需要的内容。
[编辑]
我想我刚刚理解你的意思,你想要为每个插入操作添加一个值,该值是当前在 table 中的总行数?
如果是这样,请尝试这样的操作:
更新tbl_name
SET id = (select count(*) from tbl_name)
其中 yada_yada_yada
如果我理解正确的话,这应该对你有用:
UPDATE tbl_name SET id=rowid
编辑
如果是这种情况 -> 那么它就有点棘手了,因为 SQlite 不支持变量声明。
所以我的建议是,
- 从原始 table 的 select 创建临时 table,这使得它的 rowid 成为行号 1、2、3 等...
- 设置它的rowNum(需要的行号列)作为每个rowid
- 然后用它替换原来的table。
像这样:(假设原来的table叫orig_name)
CREATE TABLE tmp_tbl AS SELECT rowNum FROM orig_name;
UPDATE tmp_tbl SET rowNum=rowid;
DROP TABLE orig_name;
CREATE TABLE orig_name AS SELECT rowNum FROM tmp_tbl;
DROP TABLE tmp_tbl;
我不确定我在这里使用的术语是否正确。
基本上我想使用 count(*) [485] 作为分隔符按升序更新整个“id”列,因此生成的行值将与 rownumber(而不是 rowid)相对应。
试试这个:http://www.sqlite.org/lang_createtable.html#rowid
您可以使用一些内部数据库变量,例如 rowid、oid 等来获取您需要的内容。
[编辑] 我想我刚刚理解你的意思,你想要为每个插入操作添加一个值,该值是当前在 table 中的总行数? 如果是这样,请尝试这样的操作:
更新tbl_name SET id = (select count(*) from tbl_name) 其中 yada_yada_yada
如果我理解正确的话,这应该对你有用:
UPDATE tbl_name SET id=rowid
编辑 如果是这种情况 -> 那么它就有点棘手了,因为 SQlite 不支持变量声明。 所以我的建议是,
- 从原始 table 的 select 创建临时 table,这使得它的 rowid 成为行号 1、2、3 等...
- 设置它的rowNum(需要的行号列)作为每个rowid
- 然后用它替换原来的table。
像这样:(假设原来的table叫orig_name)
CREATE TABLE tmp_tbl AS SELECT rowNum FROM orig_name;
UPDATE tmp_tbl SET rowNum=rowid;
DROP TABLE orig_name;
CREATE TABLE orig_name AS SELECT rowNum FROM tmp_tbl;
DROP TABLE tmp_tbl;