我在用
SQLite
CREATE TABLE path (id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
UNIQUE(name));
我在寻找一种简短的方式,在SQL中说“将这个给定的路径插入路径表并给我它被分配的id,或者如果它已经存在,就给我id”。
现在,我正在使用多个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();
}
因此,我首先尝试查找id;如果它似乎不存在,我添加一个新条目,最后再进行一次选择以获取最近使用的id。这似乎有点笨拙,可能效率低下。
更新
:常见的情况是
已经存在了,所以上面的伪代码中的初始SELECT在大多数情况下都会找到结果。