SQLite唯一索引由2个字段组成

时间:2012-01-25 08:44:07

标签: sql sqlite

我有这样的表:

CREATE TABLE "Date_Table" 
("Year" DATETIME , 
 "Month1" INTEGER, 
 "Month2" INTEGER,
 "ID" INTEGER)

然后我创建了2列的inique索引

CREATE UNIQUE INDEX field1_field2_idx ON table_name(Year, ID)

当我完成时,我想插入如果没有这种记录,并替换,如果有。

INSERT OR REPLACE INTO Date_Table(Year, Month1, Month2, ID) Values(2012, 1, ?,1)

此时所有内容都应该如此,但如果我这样做,请插入:

INSERT OR REPLACE INTO Date_Table(Year, Month1, Month2, ID) Values(2012, ?, 1,1) 

它将所有删除Month1的记录替换为NULL,但我只想更新那一行Month2列。

也许有人可以帮我解决这个问题。这是关于SQLite

1 个答案:

答案 0 :(得分:0)

这个问题是重复的: SQLite - UPSERT *not* INSERT or REPLACE

对于您的架构尝试类似:

INSERT OR REPLACE INTO Date_Table (Year, Month1,  Month2, ID) 
Values(
   2012, 
   (select Month1 from Data_Table where Year = 2012 and ID = 1),
   1,1) 

已编辑OP评论:

您可以指定select on insert

而不是值
INSERT OR REPLACE INTO Date_Table (Year, Month1, Month2, ..., Month12, ID) 
select
   2012 as Year, 
   Month1,
   Month2,
   ...
   1 as Month12,
   ID
from Data_Table 
where Year = 2012 and ID = 1

免责声明:未经测试。