如何在SQLite中不存在

时间:2009-02-10 04:14:49

标签: sql sqlite

我正在尝试将此行从MS SQL Server移植到SQLite

IF NOT EXISTS(SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received') 
    INSERT INTO EVENTTYPE (EventTypeName) VALUES ('ANI Received');

似乎SQLite不支持IF NOT EXISTS或者至少我不能使它工作。 我错过了一些简单的事吗?有解决方法吗?

3 个答案:

答案 0 :(得分:112)

这个怎么样?

INSERT OR IGNORE INTO EVENTTYPE (EventTypeName) VALUES 'ANI Received'

(未经测试,因为我没有SQLite ......但是this link非常具有描述性。)

此外,这也应该有效:

INSERT INTO EVENTTYPE (EventTypeName)
SELECT 'ANI Received'
WHERE NOT EXISTS (SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received');

答案 1 :(得分:8)

如果要忽略现有值的插入,表中必须有一个Key字段。只需使用主键字段创建一个表格,如:

CREATE TABLE IF NOT EXISTS TblUsers (UserId INTEGER PRIMARY KEY, UserName varchar(100), ContactName varchar(100),Password varchar(100));

然后在表格上插入或替换/插入或忽略查询,如:

INSERT OR REPLACE INTO TblUsers (UserId, UserName, ContactName ,Password) VALUES('1','UserName','ContactName','Password');

它不会让它重新输入现有主键值...这是如何检查表中是否存在值。

答案 2 :(得分:1)

您还可以使用KEY字段在表上设置约束,并将On Conflict设置为“Ignore”

  

当发生适用的约束违规时,IGNORE解决方案   算法会跳过包含约束违规的一行   继续处理SQL语句的后续行,就好像   什么都没出错。包含的行之前和之后的其他行   正常插入或更新约束违规。没有错误   使用IGNORE冲突解决算法时返回。

SQLite Documentation