> Peter Bartholdsson wrote:
> > Is there some way to write this query in SQLite?
> >   UPDATE
> >     groups
> >   SET
> >     (fileCount, size) = (SELECT count(id), sum(size) FROM files where
> > groupId = 15)
> >   WHERE
> >     groupId = 15;
> >
>
> Sadly, no.  SQLite only allows a subquery to return a single
> value, not a tuple.

I haven't seen too many others that would do that either, so no great loss.

However, will SQLite do this?

    update groups
    set    filecount = result.count,
           size = result.size
    from   (
               select count(id), sum(size)
               from   files
               where  groupid = 15
           ) as result
    where  groupid = 15;

Alternative, if SQLite won't do that, select the "files" info into a
temporary table, and use the temporary table in the FROM clause above.

    create temp table result as
        select count(id), sum(size) from files where groupid = 15;

    update groups
    set    filecount = result.count,
           size = result.size
    from   result
    where  groups.groupid = 15
    and    result.groupid = 15;

It's not one statement, but it should be executable with one call, right?

Reply via email to