我有一個表中的SQLite 3:插入行的表,如果它是空的,替換現有行,如果它不是在SQLite的
CREATE TABLE foo
(
bar TEXT
);
它總是有0或1的行。我想寫一個查詢,如果有1行,則更新行,如果有0行,則添加行。最乾淨的方法是什麼?
我有一個表中的SQLite 3:插入行的表,如果它是空的,替換現有行,如果它不是在SQLite的
CREATE TABLE foo
(
bar TEXT
);
它總是有0或1的行。我想寫一個查詢,如果有1行,則更新行,如果有0行,則添加行。最乾淨的方法是什麼?
採取描述here的方法,給出表主鍵,並使用INSERT OR IGNORE
語法,始終使用相同的鍵值。
你可以做類似
IF (SELECT COUNT(*) FROM foo) = 0
BEGIN
INSERT INTO foo VALUES ('text')
END
ELSE
BEGIN
UPDATE foo SET baa = 'text'
END
希望這有助於。
如果你可以添加一個獨特的領域,那麼您可以:
INSERT OR REPLACE INTO foo (id, bar) VALUES (1, ?);
表創建在這種情況下:
CREATE TABLE foo (id INTEGER NOT NULL, bar TEXT, UNIQUE (id));
或阿列克謝發現了這件事,沒有的主鍵:
INSERT OR REPLACE INTO foo (rowid, bar) VALUES (1, ?);
這是否會使用'rowid'而不是添加另一個字段? – 2010-10-20 11:54:56
我不知道,你可以試試。 – 2010-10-20 11:58:58
看起來像它一樣。 – 2010-10-20 12:04:12
你已經將邏輯倒置了 - 你正在更新count is zero ... – 2010-10-20 10:40:41