On Fri, Feb 13, 2009 at 7:45 AM, Joe Yoder <[email protected]> wrote: > I asked this question earlier without the Jobs component. I now understand > how to handle that one with a join but haven't figured out how to join a > join. As before this code gives me a single record but I need one for the > case where there is no Typ2. > TIA - Joe Yoder > > CREATE CURSOR Family (Id I) > CREATE CURSOR Members (Parent I, Type C(1), Jcode C(1)) > CREATE CURSOR Jobs (Code C(1), Desc C(1)) > > INSERT INTO Family (Id) VALUES (1) > INSERT INTO Family (Id) VALUES (2) > INSERT INTO Members (Parent, Type, Jcode) VALUES (1, 'a', '1') > INSERT INTO Members (Parent, Type, Jcode) VALUES (1, 'b', '2') > INSERT INTO Members (Parent, Type, Jcode) VALUES (2, 'a', '3') > INSERT INTO Jobs (Code, Desc) VALUES ('1', 'A') > INSERT INTO Jobs (Code, Desc) VALUES ('2', 'B') > INSERT INTO Jobs (Code, Desc) VALUES ('3', 'C') > > SELECT Family.Id, M1.Type as Typ1, M2.Type as Typ2, J1.Desc as Job1, J2.Desc > as Job2; > FROM Family, Members as M1, Members as M2, Jobs as J1, Jobs as J2; > WHERE Family.Id = M1.Parent AND M1.Type = 'a'; > AND Family.Id = M2.Parent AND M2.Type = 'b'; > AND J1.code = M1.Jcode; > AND J2.code = M2.Jcode
-------------------------------- A good habit to get into is to USE the "join" and keep it's "on" conditions together. You don't show any joins. Not a good way to write SQL syntax that could be promoted to other backends is my point. FROM Family, join Members as MA on Family.Id = MA.Parent AND MA.Type = 'a' join Members as MB on Family.Id = MB.Parent AND MB.Type = 'b'; join Jobs as JA on JA.code = MA.Jcode; join Jobs as JB on JB.code = MB.Jcode; You will need to create an index on Members that is compound of Parent and Type and Jcode. It has been a long time since I tweaked VFP indexes but you may not get the performance out of this if they are different data types. Int / Char. I know that in mySQL or others this would not be an issue. Second point I changed in your code was to represent in the LETTER of demand in your join condition in its Name M1 is really MA same with JB not J2 Trust me years later when you have to come back to this it will all look much clearer. In VFP9 can you use joins to create temp data select <field list> from Members m.ID left join ( select MA.ID, MA.Description, JA.Description from Members MA join Jobs JA on JA.code = MA.Jcode ) as MemJobsA on M.id = MemJobsA.ID < put in stuff for the "B" here > where < my criteria exists > I thought that I heard long ago that VFP9 sql syntax got more robust in this area. HTH -- Stephen Russell Sr. Production Systems Programmer First Horizon Bank Memphis TN 901.246-0159 _______________________________________________ Post Messages to: [email protected] Subscription Maintenance: http://leafe.com/mailman/listinfo/profox OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech Searchable Archive: http://leafe.com/archives/search/profox This message: http://leafe.com/archives/byMID/profox/[email protected] ** All postings, unless explicitly stated otherwise, are the opinions of the author, and do not constitute legal or medical advice. This statement is added to the messages for those lawyers who are too stupid to see the obvious.

