SQLite 中的 IF ELSE 条件
IF ELSE Condition in SQLite
我是 SQLite 新手。
我正在 SQLite 中寻找 IF ELSE
以根据条件检查执行 UPDATE
或 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
出现错误:
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=1
和 Name=XYZ
的记录,则将执行更新。否则,将插入一条新记录。
ID
(大概是当前主键)和Name
上的唯一索引可能看起来是多余的。但是,无论如何,理想情况下,这种组合应该始终是唯一的。
如果 ID
和 Name
不是您的 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
.
我是 SQLite 新手。
我正在 SQLite 中寻找 IF ELSE
以根据条件检查执行 UPDATE
或 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
出现错误:
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=1
和 Name=XYZ
的记录,则将执行更新。否则,将插入一条新记录。
ID
(大概是当前主键)和Name
上的唯一索引可能看起来是多余的。但是,无论如何,理想情况下,这种组合应该始终是唯一的。
如果 ID
和 Name
不是您的 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
.