2017-02-13 80 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