On 15/05/2009 2:37 PM, Dennis Cote wrote:
> Evan Burkitt wrote:
>> This isn't a Sqlite question per se, but I know there are some SQL gurus 
>> here who might have some insight into this problem. I apologize for 
>> being off-topic; I can be shameless when I need help. :)>
>>
>> I have three tables, N, P and E. N contains the fields id and name. The 
>> other two each contain the fields id, type and addr. P holds phone 
>> numbers, E email addresses. In P, the type field is always 'phone'; in 
>> the P it is always 'email'. They are all related on id.
>>
>> I want to build a single query that will return a result set consisting 
>> of N.name, P/E.type and P/E.addr. That is, it contains the like-named 
>> fields of both P and E. For example:
>>
>> -name-------- -type--- -addr---------
>> "John Smith", "phone", "123-555-1212"
>> "John Smith", "email", "john.sm...@domain.com"
>> "Bill Jones", "phone", "123-555-1213"
>> "Jane Johnson", "email", "j...@anotherdomain.com"
>>
>> and so forth. The order of the names and types is not important.
>>
>> Is this possible?
>>
>>   
> 
> This (untested) SQL should do what you want.
> 
> select N.name as name, C.type as type, C.addr as addr
> from N
> join (select id, type, addr from P
>       union
>       select id, type, addr from E) as C
> on C.id = N.id
> order by N.name, C.type;

or slightly differently:

select N.name, P.type, P.addr from N join P on N.id = P.id
union
select N.name, E.type, E.addr from N join E on N.id = E.id
order by 1, 2;


> 
> The union combines all the data from your P and E tables so they can be 
> joined to the N table using the id filed. The result is sorted by the 
> order by clause which you could drop if you really don't care about the 
> order of the results.
> 
> Your database would be simpler if you simply combined these two tables 
> into a single table in the first place. It would eliminate the need to 
> combine them for this type of query. The tables already have a type 
> field to distinguish the email adresses from the phone numbers, so there 
> is no need to put them in separate tables.

Very good advice. Evan, consider what you would have to do if you wanted 
to distinguish what sub-type of phone number (work, home, cell aka 
mobile, work fax, home fax) and what type of e-mail (home, work) plus 
other contact methods (skype, pager, ...) --- this is not an 
unreasonable requirement at all for a contacts database, even a 
home-grown one.

Cheers,
John

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

Reply via email to