Given the following example table and data:

    create table x(id integer);

    with recursive
        src(id)
    as
        (select
            1
         union all select
            id + 1
         from
            src
         where
            id < 5)
    insert into
        x(id)
    select
        id
    from 
        src
    ;

My goal is to select each row from table x, and the sum total, in the
same query. The following returns the results correctly as expected:

    with
        x_all
    as
        (select
            id
         from
            x),

        x_sum
    as
        (select
            sum(id)
         from
            x_all)
    select
        *
    from
        x_all
    union all select
        *
    from
        x_sum
    ;

    /*
        id        
        ----------
        1         
        2         
        3         
        4         
        5         
        15       
    */

However when doing an explain query plan I see that the source "x"
table is scanned twice where I would have expected it to only be
scanned once:

    selectid,order,from,detail
    1,0,0,"SCAN TABLE x"
    2,0,0,"SCAN TABLE x"
    0,0,0,"COMPOUND SUBQUERIES 1 AND 2 (UNION ALL)"

Is this expected? For my real query the x_all data is relatively
complicated with lots of joins, and I was wondering if it is absolutely
necessary for SQLite to be doing double the amount of work it needs to?

Mark.
-- 
Mark Lawrence

Reply via email to