Or this, which is even simpler:
select t1.key,
max(t2.rev) as maxrev,
t2.data
from t1
left join t2
on t1.key == t2.key
and rev < :rev
group by t1.key
order by t1.key;
--
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 <[email protected]> On
>Behalf Of Keith Medcalf
>Sent: Monday, 30 September, 2019 19:31
>To: SQLite mailing list <[email protected]>
>Subject: Re: [sqlite] Lookup join
>
>
>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 <[email protected]> On
>>Behalf Of Fredrik Larsen
>>Sent: Monday, 30 September, 2019 04:12
>>To: SQLite mailing list <[email protected]>
>>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
>>[email protected]
>>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
>_______________________________________________
>sqlite-users mailing list
>[email protected]
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users