2017-02-17 4 views
0

Ich versuche, SQL-Abfrage wie dieseKomplexe Update-Abfrage in SQLite

update objs a set a.dirSize= sum(files.fileSize) 
inner join objs files on files.fullPath like a.fullPath||'\%' and files.isDir=0 
where a.isDir=1 
group by a.fullPath 

Im DB-Browser für SQLite 3.9.1, aber diese Abfrage wird mit Fehler

near "a": syntax error: 

Wie beheben auszuführen und eine solche SQL-Abfrage ausführen?

Vielen Dank!

+0

sqlite unterstützt keine Joins im Update. Sie müssen korrelierte Sub-Abfragen verwenden, um zu bekommen, was Sie brauchen. –

Antwort

1

SQLite unterstützt keine Joins in update. Sie müssen korrelierte Unterabfragen verwenden, um zu erhalten, was Sie brauchen.

update objs 
set dirSize= (select sum(fileSize) 
       from files 
       where fullPath like objs.fullPath||'\%' and isDir=0) 
where isDir=1 

Edit: Per OP ist die betroffene Tabelle die gleiche.

update objs 
set dirSize= (select sum(b.fileSize) 
       from objs b 
       where b.fullPath like objs.fullPath||'\%' and b.isDir=0) 
where isDir=1 
+0

ok, aber was ist, wenn Dateien und Verzeichnisse in der gleichen Tabelle 'Objs' sind? 'update objs a setze a.dirSize = (wähle sum (b.fileSize) aus objs b wo b.fullPath wie a.fullPath || '\%' und b.isDir = 0) wo a.isDir = 1' funktioniert auch nicht. –

+0

erhalten Sie einen Fehler? Was funktioniert nicht? –

+0

yeah, 'near" a ": Syntaxfehler:' –