2016-10-20 2 views
0

Я использую базу данных SQLite.SQLite CASE statement - INSERT IF NOT EXISTS

Я хочу вставить id value или url Value, если id Value не существует, но нет поддержки функции IF(), как я должен писать ее с помощью инструкции SQL CASE?

require 'sqlite3' 
$db.execute(" 
IF NOT EXISTS(select * from table WHERE id='123456') 
BEGIN 
INSERT INTO sap(id,url) VALUES('123456', 'https:/test.com'); 
END;") 

Любая помощь будет оценена,

Спасибо!

+1

Также см. Http://stackoverflow.com/questions/418898/sqlite-upsert-not-insert-or-replace –

ответ

1

Один из способов, чтобы написать это как одно утверждение:

INSERT INTO sap(id, url) 
    SELECT id, url 
    FROM (SELECT '123456' as id, 'https:/test.com' as url) t 
    WHERE NOT EXISTS (SELECT 1 FROM sap WHERE sap.id = t.id); 

Однако, правильный ответ должен использовать уникальный индекс/ограничение поэтому база данных делает проверку внутренне:

CREATE UNIQUE INDEX unq_sap_id ON sap(id); 

Если вы попытаетесь вставить дублирующее значение для id, то INSERT не будет выполнено.

+0

спасибо, так что мне просто нужно создать индекс один раз, верно? – Berlin

+0

@Berlin. , , Да. После его создания база данных будет поддерживать ее. –

+0

Еще раз спасибо за помощь! – Berlin