Я использую SQLite для поддержки базы данных, которая содержит, помимо прочего, таблицу с путями. Оператор CREATE для таблицы выглядит следующим образом
CREATE TABLE path (id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
UNIQUE(name));
Я ищу короткий способ сказать «вставьте этот заданный путь в таблицу путей и дайте мне идентификатор, которому он был назначен, или просто дайте мне идентификатор, если он уже существует» в SQL.
Сейчас я делаю это с помощью нескольких операторов SQL (псевдокод вперед):
unsigned int getIdForPath(p) {
result = exec("SELECT id FROM path WHERE name='$p';");
if result.empty {
exec("INSERT INTO path VALUES(NULL, '$p');");
result = exec("SELECT last_insert_rowid() FROM path;");
}
return result.toInt();
}
Итак, я сначала пытаюсь найти идентификатор; если он, кажется, не существует, я добавляю новую запись и, наконец, делаю еще один SELECT, чтобы получить последний использованный идентификатор. Это кажется немного неуклюжим и, возможно, неэффективным.
Есть ли более компактный и / или эффективный способ реализации этой логики?
ОБНОВЛЕНИЕ : Распространенным случаем является то, что запись уже существует , поэтому начальный SELECT в приведенном выше псевдокоде найдет результат в большинстве случаев.