I have 3 files. 1 shapefile and 2 DBF files. For those of who are not a familiar with shapefiles(GIS data format), they are essentially a database table with columns and rows that have spatial geometry such as point,line,polygon etc.. which can be displayed visually and used in calculations in a GIS software shapefile - trucknetwork: 564 records(column sri links to table1) - specific truck road network in NJ with no road names gid integer NOT NULL DEFAULT nextval('trucknetwork_gid_seq'::regclass), id numeric(10,0), sri character varying(20), mp_start double precision, mp_end double precision, descriptio character varying(50), road_type character varying(50), geom geometry(MultiLineStringM), CONSTRAINT trucknetwork_pkey PRIMARY KEY (gid) Table1 - 488715 records(links to shapefile with sri column and table2 with seg_guid column) - start and end points of all NJ roads, with seg_guid that links to table2 gid integer NOT NULL DEFAULT nextval('table1_gid_seq'::regclass), objectid integer, seg_guid character varying(38), sri character varying(20), route_type numeric, sld_mp_st numeric, sld_mp_end numeric, CONSTRAINT table1_pkey PRIMARY KEY (gid) Table2 - 669557 records(Links to table1 with seg_guid column) - all NJ road names gid integer NOT NULL DEFAULT nextval('table2_gid_seq'::regclass), objectid integer, seg_guid character varying(38), s_name character varying(254), CONSTRAINT table2_pkey PRIMARY KEY (gid) I want to join these 3 tables into 1 table - with the result being 564 records of each road segment with its correct name. It is a 1 to Many relationship. I have posted this question on GIS stackexchange but I did not get a lot of feedback and I want to do this task in SQL not a GIS software I have tried left join, inner join - and I have tried the group by but for every query I keep getting over 100,000 + records select shp.descriptio as descr, shp.road_type as road_type, shp.geom as geom, t2.s_name as street_name into networkEX from trucknetwork as shp join table1 as t1 on shp.sri = t1.sri join table2 as t2 on t1.seg_guid = t2.seg_guid; I am not sure what the logic should be, subquery? do i have to break this up into smaller steps?