Ein anderer Ansatz ist INSERT ... SELECT ... WHERE ... EXISTS [oder nicht] (SELECT ...);
Ich mache so etwas ständig, und ich verwende auch den Vorschlag von jklemmack. Und ich mache es auch für andere Zwecke, z. B. für JOINs in UPDATEs (was SQLite3 nicht unterstützt).
Zum Beispiel:
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;
Das WHERE dort hat die Bedingung, die Sie in Ihrem IF haben würden. Der JOIN im SELECT bietet den JOIN, den SQLite3 in UPDATE nicht unterstützt. Das INSERT OR REPLACE und die Verwendung von t.id (die NULL sein kann, wenn die Zeile in t nicht existiert) bilden zusammen die THEN- und ELSE-Körper.
Sie können dies immer wieder anwenden. Wenn Sie drei Anweisungen (die nicht irgendwie zu einer einzigen zusammengeführt werden können) im DANN-Teil des WENN-Teils haben, müssen Sie drei Anweisungen mit der WENN-Bedingung in ihren WEN-Teilen haben.