Я хочу вставить запись в sqlite таблицу если на самом деле не вставленный.
Скажем, это имеет три поля pk, имя, адрес
Я хочу ВСТАВИТЬ новую запись с именем если то имя, не добавленное ранее.
Мы можем сделать с этим в едином запросе. Походит на его немного отличающееся от SQL-запросов иногда.
Почему бы просто не добавить уникальный индекс к имени?
Да, вы можете сделать это с помощью одного запроса.
INSERT ON CONFLICT IGNORE должен помочь вам: http://www.sqlite.org/lang_conflict.html
Установите уникальный ключ на имя, это создаст конфликт, когда вы попытаетесь вставить запись, если имя уже существует.
По умолчанию используется ABORT, поэтому без IGNORE оператор вернет ошибку. Если вы не хотите этого, используйте IGNORE.
Если вы не можете использовать УНИКАЛЬНЫЙ ИНДЕКС
в сочетании с INSERT INTO
или INSERT OR IGNORE INTO
, вы можете написать такой запрос:
INSERT INTO table (column)
SELECT value
WHERE NOT EXISTS (SELECT 1
FROM table
WHERE column = value)