另一种方法是 INSERT ... SELECT ... WHERE ... EXISTS [or not] (SELECT ...);
我一直在做这种事情,我也使用 jklemmack 的建议。而且我也出于其他目的这样做,例如在 UPDATE 中执行 JOIN(SQLite3 不支持)。
例如:
CREATE TABLE t(id INTEGER PRIMARY KEY, c1 TEXT NOT NULL UNIQUE, c2 TEXT);
CREATE TABLE r(c1 TEXT NOT NULL UNIQUE, c2 TEXT);
INSERT OR REPLACE INTO t (id, c1, c2)
SELECT t.id, coalesce(r.c1, t.c1), coalesce(r.c2, t.c2)
FROM r LEFT OUTER JOIN t ON r.c1 = t.c1
WHERE r.c2 = @param;
WHERE 具有您在 IF 中的条件。SELECT 中的 JOIN 提供了 SQLite3 在 UPDATE 中不支持的 JOIN。INSERT OR REPLACE 和 t.id 的使用(如果 t 中不存在该行,则可以为 NULL)一起提供 THEN 和 ELSE 主体。
您可以一遍又一遍地应用它。如果您在 IF 的 THEN 部分中有三个语句(不能以某种方式合并为一个),那么您需要在其 WHERE 中包含三个带有 IF 条件的语句。