Вставьте строку в таблицу, если она пуста, и замените существующую строку, если ее нет в SQLite. - PullRequest
2 голосов
/ 20 октября 2010

У меня есть таблица в SQLite 3:

CREATE TABLE foo
(
bar TEXT
);

В ней всегда 0 или 1 строка.Я хочу написать запрос, который обновляет строку, если есть 1 строка, и добавляет строку, если есть 0. Какой самый чистый способ сделать это?

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

если вы можете добавить еще одно уникальное поле, то вы можете:

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, ?);
1 голос
/ 20 октября 2010

Используйте подход, описанный здесь , присваивая таблице первичный ключ и используя синтаксис INSERT OR IGNORE, всегда используя одно и то же значение ключа.

1 голос
/ 20 октября 2010

Вы могли бы сделать что-то вроде

IF (SELECT COUNT(*) FROM foo) = 0  
    BEGIN  
        INSERT INTO foo VALUES ('text')  
    END  
ELSE  
    BEGIN  
        UPDATE foo SET baa = 'text' 
    END

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...