2017-02-13 63 views
0

我有一个关于sqlite的问题。Sqlite - 智能插入或替换查询

假设我创建了一个表:

CREATE TABLE GOODS(ID TEXT PRIMARY KEY NOT NULL, TYPE TEXT, VERSION INTEGER) 

那么一段时间,我想用“插入或更换”这样的后:

insert or replace into GOODS(ID, TYPE,VERSION) values ('chrome_id', 'chrome', 15); 

但我想这个查询“代替”当且仅当old.VERSION < new.VERSION。

我该怎么做?

我需要使用查询(它应该看起来像这样:)?

1. get row 
if(row.VERSION < myVersion){ 
2. insert or replace ... 
} 

我听说过触发器,但我确实认为这是解决方案。 THX

+0

NO。如果找不到,则REPLACE INTO将INSERT值,如果找到,则更新它。你需要一个**命令**(查询只有SELECT)。 –

+0

据我了解,替换是:DELETE + INSERT。当我写“我该怎么做?”我的意思是一个单一的命令,所以当你说我需要一个命令时,你的意思是什么? @Rotwang – wantToLearn

+0

您需要一个命令(REPLACE INTO)。它在幕后完成你的命令不是你的业务。你告诉它执行** one **命令,并为你执行** 2 **。 –

回答

1

使用INSERT statement的SELECT形式能够控制多少行插入:

INSERT OR REPLACE INTO Goods(ID, Type, Version) 
SELECT 'chrome_id', 'chrome', 15 
WHERE NOT EXISTS (SELECT * 
        FROM Goods 
        WHERE ID = 'chrome_id' 
        AND Version >= 15); 
+0

它的工作原理!谢谢! – wantToLearn