Thread: noobie join question
Hi List, I am having trouble trying to figure out how to get the result listed at the bottom. I have 3 tables units, types of units which has a description of the units, and a table that list associations of the units. I can't figure out how to do the proper joins. Any pointers would be appreciated. create table types ( id integer, descr varchar(30) ); COPY types (id, descr) FROM stdin; 1 descr 1 2 descr 2 3 descr 3 4 descr 4 \. create table units ( uid integer, udevice varchar(30), utype integer ); COPY units (uid, udevice, utype) FROM stdin; 1 aaaaa 1 2 bbbbb 1 3 ccccc 4 4 ddddd 3 \. create table assoc ( aid integer, src_id integer, dest_id integer ); COPY assoc (aid, src_id, dest_id) FROM stdin; 1 1 2 2 1 3 3 3 4 4 4 2 \. desired result aaaaa | descr 1 | bbbbb | descr 1 aaaaa | descr 1 | ccccc | descr 4 ccccc | descr 4 | ddddd | descr 3 ddddd | descr 3 | bbbbb | descr 1 Thanks, Steve
On Mon, 2015-05-11 at 06:46 -0400, Steve Clark wrote: > Hi List, > I am having trouble trying to figure out > how to get the result listed at the bottom. > > I have 3 tables units, types of units which has a description of the units, > and a table that list associations of the units. I can't figure out > how to do the proper joins. Any pointers would be appreciated. SELECT us.udevice, ts.descr, ud.udevice, td.descr FROM assoc AS a LEFT JOIN units AS us ON a.src_id = us.uid LEFT JOIN types AS ts ON us.utype = ts.id LEFT JOIN units AS ud ON a.dest_id = ud.uid LEFT JOIN types AS td ON ud.utype = td.id;
Steve Clark wrote: > I am having trouble trying to figure out > how to get the result listed at the bottom. That's a bit tough, since you don't describe the desired result. > I have 3 tables units, types of units which has a description of the units, > and a table that list associations of the units. I can't figure out > how to do the proper joins. Any pointers would be appreciated. > > create table types ( > id integer, > descr varchar(30) > ); > > COPY types (id, descr) FROM stdin; > 1 descr 1 > 2 descr 2 > 3 descr 3 > 4 descr 4 > \. > > create table units ( > uid integer, > udevice varchar(30), > utype integer > ); > > COPY units (uid, udevice, utype) FROM stdin; > 1 aaaaa 1 > 2 bbbbb 1 > 3 ccccc 4 > 4 ddddd 3 > \. > > > create table assoc ( > aid integer, > src_id integer, > dest_id integer > ); > > COPY assoc (aid, src_id, dest_id) FROM stdin; > 1 1 2 > 2 1 3 > 3 3 4 > 4 4 2 > \. These tables should have foreign key constraints to each other, so that we can understand how they are related and to make sure that no impossible values are inserted. > desired result > aaaaa | descr 1 | bbbbb | descr 1 > aaaaa | descr 1 | ccccc | descr 4 > ccccc | descr 4 | ddddd | descr 3 > ddddd | descr 3 | bbbbb | descr 1 If my guesses are correct, the query would be SELECT u1.udevice, t1.descr, u1.udevice, t1.descr FROM assoc a JOIN units u1 ON (a.src_id = u1.uid) JOIN types t1 ON (u1.utype = t1.id) JOIN units u2 ON (a.dest_id = u2.uid) JOIN types t2 ON (u2.utype = t2.id); I did not test this. Yours, Laurenz Albe
On 05/11/2015 07:16 AM, Oliver Elphick wrote:
Thanks Oliver - that worked perfectly.On Mon, 2015-05-11 at 06:46 -0400, Steve Clark wrote:Hi List, I am having trouble trying to figure out how to get the result listed at the bottom. I have 3 tables units, types of units which has a description of the units, and a table that list associations of the units. I can't figure out how to do the proper joins. Any pointers would be appreciated.SELECT us.udevice, ts.descr, ud.udevice, td.descr FROM assoc AS a LEFT JOIN units AS us ON a.src_id = us.uid LEFT JOIN types AS ts ON us.utype = ts.id LEFT JOIN units AS ud ON a.dest_id = ud.uid LEFT JOIN types AS td ON ud.utype = td.id;
--
Stephen Clark
NetWolves Managed Services, LLC.
Director of Technology
Phone: 813-579-3200
Fax: 813-882-0209
Email: steve.clark@netwolves.com
http://www.netwolves.com
Stephen Clark
NetWolves Managed Services, LLC.
Director of Technology
Phone: 813-579-3200
Fax: 813-882-0209
Email: steve.clark@netwolves.com
http://www.netwolves.com