You mean something like this:

 select key, 
        maxrev, 
        data
   from (
          select key, 
                 null as maxrev, 
                 null as data
            from t1 
           where key not in (select key 
                               from t2 
                              where rev < :rev)
       union all
          select t1.key, 
                 max(rev) as maxrev, 
                 data
            from t1, t2
           where t1.key == t2.key
             and rev < :rev
        group by t2.key
         )
order by key;

t1 should have an index on key
t2 should have an index on key, rev

-- 
The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
lot about anticipated traffic volume.

>-----Original Message-----
>From: sqlite-users <sqlite-users-boun...@mailinglists.sqlite.org> On
>Behalf Of Fredrik Larsen
>Sent: Monday, 30 September, 2019 04:12
>To: SQLite mailing list <sqlite-users@mailinglists.sqlite.org>
>Subject: [sqlite] Lookup join
>
>Consider query below;
>
>SELECT key
>FROM t1
>LEFT JOIN (
>  SELECT key,max(rev),data
>  FROM t2
>  WHERE rev < ?
>  GROUP BY key
>) USING (key)
>ORDER BY key ?
>LIMIT ?
>
>In above query sqlite will materialize the t2-sub-query and then start
>working on the outer query. I have a lot of data in t2 so this will
>consume
>a lot of time.
>
>To overcome this I perform above query manually i two stages; I fetch the
>t1 data, then for each row I do a lookup and manually join. This is very
>fast by but makes it hard to reuse this base-query in other queries.
>
>So my question is; Can sqlite do lookup-type joins, like to do manually
>in
>code, to avoid the overhead of materializing the full t2-query on all
>keys,
>and using just a fraction of this work?
>
>I suspect the answer is no, if so, maybe this is solvable through a
>custom
>virtual table? I have looked at ext/misc/eval.c, and this custom function
>could be used if a function where alloed to return multiple columns..
>
>Fredrik
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to