>>Donald,
>>
>>Thanks for your reply, its all a bit new to me, so i'm still trying to get my 
>>head round it and hopefully be able to explain myself better.
>>
>>I'm actually creating the unique ids, it is just a number.
>>
>>I now think my understanding of an attached database is wrong, my first 
>>thoughts were that a single SELECT command would query both databases, but 
>>now i believe i would have to use the following syntax to do a query on both 
>>databases:
>>
>>SELECT id, name FROM database1.main, database2.main WHERE name == %me% ORDER 
>>BY name
>>
>> 
>>
>>Which would produce alphabetically sorted results from both attached tables? 
>>But because both the databases will have been created separately, they could 
>>have overlapping ids, which i need to avoid.
>>
>>To avoid overlapping ids i could manually get all the ids from database1 and 
>>(for arguments sake) add a '1' to the end and all the ids from database2 and 
>>add a '2' to the end. If the client then requested further information on id 
>>6731, i would know it was from database 1, strip that digit out and so get 
>>further information from id 673 database1. Doing it this way however means i 
>>have to alphabetically sort the results from the two tables, after the two 
>>queries.
>>
>>So i guess i was just wondering if this was all possible in a single query, 
>>or sqlite gave some indication of where the results were coming from so i 
>>could tag them for id mangling.
>>
>>I hope i've managed to explain myself better and not made it even worse!
>>
>>Thanks
>>Andrew
>>  
>>
>Andrew,

>I think what you are after is more like this;
>
>select id * 10 + 1 as uid, name from main.sometable where name like '%me%'
>union
>select id * 10 + 2 as uid, name from database2.sometable where name like 
>'%me%'
>order by name
>
>This will combine the results of the two queries, one on the sometable 
>of each database, and adjust the returned id so that the correct 
>database can be determined from the uid (by using the modulus operator 
>to get the database number, ie. uid % 10 is the database). This should 
>work as long as your id values are small enough.
>
>To return other data from a record specified by this uid value you can 
>use a case statement like this;
>
>select case :uid % 10
>    when 1 then
>       select name, otherdata from main.sometable where id = :uid / 10
>    when 2 then
>       select name, otherdata from database2.sometable where id = :uid / 10
>    end;
>
>You can then bind the :uid value (or generate the sql string on the fly) 
>and get the requested data from the correct database.
>
>HTH
>Dennis Cote

Dennis,

A ha! This seems perfect, one quick question, when you say "id values are small 
enough", are we talking about an integer size limit hard coded into sqlite? I 
mean with the *10 is the value of id ultimately limited to 6553? This may cause 
an issue, however if we are talking 32 bit then that won't be a problem.

Thank you for your help, i'm continually impressed with how much you can do 
with an sql statement!

Andrew

Reply via email to