鉴于此表:
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以具有最新的唯一值。
答案 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])