SQLite 中的 IF ELSE 条件

IF ELSE Condition in SQLite

我是 SQLite 新手。

我正在 SQLite 中寻找 IF ELSE 以根据条件检查执行 UPDATEINSERT 操作。

我试过的是:

IF EXISTS(SELECT 1 FROM TblTest WHERE ID = 1 AND Name = 'XYZ')
BEGIN
END
    UPDATE TblTest
    SET Address = 'NYC',
    Mobile='102938340'
    WHERE ID = 1 AND Name='XYZ'
ELSE
BEGIN
INSERT INTO TblTest(ID,Name,Address,Mobile)
    VALUES(1,'XYZ','NYC','102938340');
END

出现错误:

Result: near "IF": syntax error

如果您在 (ID, Name) 上有一个唯一索引,您可以利用 SQLite 的 REPLACE 语法:

CREATE UNIQUE INDEX idx_id_name ON TblTest (ID, Name);

INSERT OR REPLACE INTO TblTest (ID, Name, Address, Mobile)
VALUES
    (1, 'XYZ', 'NYC', '102938340');

如果 table 中已经存在 ID=1Name=XYZ 的记录,则将执行更新。否则,将插入一条新记录。

ID(大概是当前主键)Name上的唯一索引可能看起来是多余的。但是,无论如何,理想情况下,这种组合应该始终是唯一的。

如果 IDName 不是您的 table 的唯一组合,因此您不能使用 INSERT OR REPLACE,您可以执行这些语句:

UPDATE TblTest
SET Address = 'NYC',
    Mobile='102938340'
WHERE ID = 1 AND Name='XYZ';

INSERT INTO TblTest(ID,Name,Address,Mobile)
SELECT 1,'XYZ','NYC','102938340'
WHERE NOT EXISTS(SELECT 1 FROM TblTest WHERE ID = 1 AND Name = 'XYZ');

如果 table 中没有包含 ID = 1 AND Name = 'XYZ' 的行,那么 UPDATE 语句将不会更新任何内容,因为 WHERE 子句中的条件将 return 没什么。但是 INSERT 语句将插入新行。
如果有包含 ID = 1 AND Name = 'XYZ' 的行,那么 UPDATE 语句将更新它并且 INSERT 语句不会插入任何内容,因为 NOT EXISTS 将 return FALSE.