SQLite:表中具有唯一列的重复行

SQLite:表中具有唯一列的重复行,sqlite,Sqlite,鉴于此表: CREATE TABLE aTable (aCol TEXT UNIQUE, ...); INSERT INTO aTable VALUES ( 'one', ... ); 我需要复制rowid1,然后更改它 BEGIN; INSERT INTO aTable SELECT * FROM aTable WHERE rowid = 1; UPDATE aTable SET aCol = 'new unique value' WHERE rowid = 1; COMMIT; 但这违反

鉴于此表:

CREATE TABLE aTable (aCol TEXT UNIQUE, ...);
INSERT INTO aTable VALUES ( 'one', ... );
我需要复制rowid1,然后更改它

BEGIN;
INSERT INTO aTable SELECT * FROM aTable WHERE rowid = 1;
UPDATE aTable SET aCol = 'new unique value' WHERE rowid = 1;
COMMIT;
但这违反了唯一的约束

如何检索rowid1的事务前状态

当然,我可以在事务之前执行SELECT,并将其结果绑定到准备好的INSERT语句。我也知道以下几点,但还有其他方法吗

CREATE TEMP TABLE aTemp AS SELECT * FROM aTable WHERE rowid = 1;
...
DROP TABLE aTemp;
更新

更多上下文:
aTable
是具有正常顺序的历史记录表,后面的行是更高的版本。但是,有一行(rowid1)正在进行中,因此不在历史记录中。因此,必须更新rowid1,使其具有最新的唯一值

我不确定我是否遗漏了一些明显的东西,但你能不能简单地做一些像:

INSERT INTO table (col1, col2, col3)
    SELECT col1, 'New value', col3 FROM other_table WHERE col1 = 1

…这将复制除col2之外的行。您没有提到的是新的唯一值将从何而来,因此围绕这一点提供一些指导可能会有所帮助。

vlookup可以实现

组织数据,以便查找的值位于要查找的返回值的左侧

语法


VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])

我需要新的唯一值放入rowid 1,现有值放入新行。如果新行与原始行重复,那么哪一行获得新值重要吗?是。在这个应用程序中,rowid 1有一个特殊的角色,它总是有一个最新的唯一值。“在这个应用程序中,rowid 1有一个特殊的角色…”这并没有什么好处。听起来好像你在创建一个历史记录表,但反过来说(即,后面的行ID有更旧的历史记录)。是这样吗?如果是这样的话,那么你最好在它的头上打开它,这样rowid就可以有效地成为一个版本号。