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

时间:2012-02-27 20:23:40

标签: sqlite

鉴于此表:

CREATE TABLE aTable (aCol TEXT UNIQUE, ...);
INSERT INTO aTable VALUES ( 'one', ... );

我需要复制rowid 1然后更改它

BEGIN;
INSERT INTO aTable SELECT * FROM aTable WHERE rowid = 1;
UPDATE aTable SET aCol = 'new unique value' WHERE rowid = 1;
COMMIT;

但这违反了UNIQUE约束。

如何检索rowid 1的事务前状态?

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

...这将复制除col2之外的行。你没有提到的是新的独特价值来自何处,所以对它的一些指导是有帮助的。

答案 1 :(得分:1)

可以实现vlookup

整理您的数据,以便您查找的值位于您要查找的返回值的左侧。

语法

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