Ik liep tegen een "probleem" aan waarbij ik in een enkele query,met SQLite, waarbij ik meerdere regels wilde updaten, iedere met hun eigen waarden
Ook had ik geen zin om een query uit te voeren voor elke regel.
Hoe kunnen we dit doen met SQLite?
Merk op: het kan zijn dat je hiervoor een nieuwere SQLite versie nodig hebt (versie 3.0 of hoger) omdat we het WITH statement gaan gebruiken.
Stel we hebben de volgende tabel:
MyFiles:
ID (PK), Filename, FileSize, FileDate
En we willen verschillende filenames updaten naar een nieuwe filename, op basis van een geslaagde rename - dus we kunnen niet lompweg alle regels in 1x updaten.
We kunnen dit echter wel in een enkele query zetten.
We gaan daarvoor het "WITH" statement gebruiken, en een soort van tijdelijke tabel "Tmp".
In onderstaand voorbeeld, zoek ik de benodigde ID's Tmp "tabel", en update daarmee de "MyFiles" regels naar de nieuwe filename.
WITH Tmp(id, newFilename) AS
(VALUES
(1, 'newfilename.txt'),
(2, 'tweaking4all.txt'),
(3, 'someothername.txt')
...
(13, 'anothernewfilename.txt') )
UPDATE "MyFiles" SET "Filename" =
(SELECT newFilename
FROM Tmp
WHERE "MyFiles"."ID" = Tmp.id)
WHERE "MyFiles"."ID" IN (SELECT id FROM Tmp);