2

我是 SQLite 的新手。

我在 SQLite 中寻找基于条件检查IF ELSE执行UPDATEOR操作。INSERT

我尝试的是:

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

收到错误:

结果:在“IF”附近:语法错误

4

2 回答 2

1

如果你有一个唯一的索引(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');

这会产生这样的效果,如果表中已经存在ID=1Name=XYZ存在记录,则将执行更新。否则,将插入一条新记录。

两者上的唯一索引ID(可能是当前主键)似乎是多余的 Name但是,无论如何,这种组合在理想情况下应该始终是唯一的。

于 2019-09-18T07:51:53.087 回答
1

如果ID并且Name不是您的表的唯一组合,因此您不能使用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');

如果表中没有行,ID = 1 AND Name = 'XYZ'则该UPDATE语句将不会更新任何内容,因为WHERE子句中的条件将不返回任何内容。但是该INSERT语句将插入新行。
如果有一行,ID = 1 AND Name = 'XYZ'UPDATE语句将更新它,并且该INSERT语句将不会插入任何内容,因为NOT EXISTS将返回FALSE

于 2019-09-18T09:48:46.880 回答