Amour22015
asked on
MS Access Joinin two queries condition
Hi Experts,
I have 2 queries that I am combining into one:
So what I want is if the primarycontact does exist then I want to use the Primarycontact(Query1). Else use
ID(Query2)
Also the samething with AltCompany (either use query1 or query2)
It looks like I am not doing this correctly and am getting way too many records.
In the other 2 queries I don't get that many so I am thinking that the IIF statement is incorrect?
Please help and thanks
I have 2 queries that I am combining into one:
SELECT IIf([inttblNAsContacts].[Contact]=[cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1].[PrimaryContact],[PrimaryContact],[id]) AS Expr5, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.AltCompany
FROM cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2, inttblNAsContacts;
So what I want is if the primarycontact does exist then I want to use the Primarycontact(Query1). Else use
ID(Query2)
Also the samething with AltCompany (either use query1 or query2)
It looks like I am not doing this correctly and am getting way too many records.
In the other 2 queries I don't get that many so I am thinking that the IIF statement is incorrect?
Please help and thanks
ASKER
Yes I am just trying to determine when to use the joins.
In Query1 I get 2,992 records
In Query2 I get 1,809 records
So the max amount of records should only be 4,801
So I have alter to this:
But you can see it still needs work.
Please help and thanks
In Query1 I get 2,992 records
In Query2 I get 1,809 records
So the max amount of records should only be 4,801
So I have alter to this:
SELECT IIf([inttblNAsContacts].[Contact]=[cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1].[PrimaryContact],[PrimaryContact],[id]) AS Expr5, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.AltCompany
FROM cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1 Left Join inttblNAsContacts ON inttblNAsContacts.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.PrimaryContact, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2 Left Join inttblNAsContacts AS inttblNAsContacts_1 ON inttblNAsContacts_1.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2.id;
But you can see it still needs work.
Please help and thanks
ASKER
Well actually the Left Join does not work in Access
SELECT IIf([inttblNAsContacts].[Contact]=[cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1].[PrimaryContact],[PrimaryContact],[id]) AS Expr5, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.AltCompany
FROM cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1 Left Join inttblNAsContacts ON inttblNAsContacts.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.PrimaryContact, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2 Left Join inttblNAsContacts AS inttblNAsContacts_1 ON inttblNAsContacts_1.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2.id;
ASKER
I am sorry must be I typed it in wrong so I currectly have this:
But I am not getting the correct amount of records
Please help and thanks
INSERT INTO NOAH2_tblNAsLists ( Contact, GroupType, GroupCode, MasterCode, Description, Notes )
SELECT IIf([inttblNAsContacts].[Contact]=[cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1].[PrimaryContact],[PrimaryContact],[id]) AS Expr5, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.AltCompany
FROM cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1 LEFT JOIN inttblNAsContacts ON cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.PrimaryContact = inttblNAsContacts.Contact, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2 LEFT JOIN inttblNAsContacts AS inttblNAsContacts_1 ON cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2.id = inttblNAsContacts_1.Contact;
But I am not getting the correct amount of records
Please help and thanks
SELECT IIf([inttblNAsContacts].[Contact]=[cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1].[PrimaryContact],[PrimaryContact],[id]) AS Expr5, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.AltCompany
FROM cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1 Left Join inttblNAsContacts ON inttblNAsContacts.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.PrimaryContact, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2 Left Join inttblNAsContacts AS inttblNAsContacts_1 ON inttblNAsContacts_1.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2.id;
ASKER
Thank you for helping me but I just combined Query1 into Query2:
Thanks for helping
SELECT DISTINCT USER_dbo_ams_contact.id, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4
FROM inttblNAsContacts AS inttblNAsContacts_1 INNER JOIN ((USER_dbo_ams_contact INNER JOIN (inttblNAsContacts INNER JOIN USER_dbo_ams_contact_custom ON inttblNAsContacts.Contact = USER_dbo_ams_contact_custom.contactID) ON USER_dbo_ams_contact.id = USER_dbo_ams_contact_custom.contactID) INNER JOIN USER_dbo_ams_group ON USER_dbo_ams_contact.orgID = USER_dbo_ams_group.id) ON inttblNAsContacts_1.Contact = USER_dbo_ams_group.primaryContact
WHERE (((USER_dbo_ams_contact.id) Not In (Select PrimaryContact From USER_dbo_ams_Group)) AND ((USER_dbo_ams_contact_custom.AltCompany) Is Not Null And (USER_dbo_ams_contact_custom.AltCompany)<>"None"))
ORDER BY USER_dbo_ams_contact.id;
Thanks for helping
SELECT IIf([inttblNAsContacts].[Contact]=[cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1].[PrimaryContact],[PrimaryContact],[id]) AS Expr5, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.AltCompany
FROM cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1 Left Join inttblNAsContacts ON inttblNAsContacts.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.PrimaryContact, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2 Left Join inttblNAsContacts AS inttblNAsContacts_1 ON inttblNAsContacts_1.Contact = cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2.id;
INSERT INTO NOAH2_tblNAsLists ( Contact, GroupType, GroupCode, MasterCode, Description, Notes )
SELECT IIf([inttblNAsContacts].[Contact]=[cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1].[PrimaryContact],[PrimaryContact],[id]) AS Expr5, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.AltCompany
FROM cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1 LEFT JOIN inttblNAsContacts ON cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany1.PrimaryContact = inttblNAsContacts.Contact, cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2 LEFT JOIN inttblNAsContacts AS inttblNAsContacts_1 ON cnv0113_USER_dbo_ams_contact_custom_NOAH2_tblNAsListsAltCompany2.id = inttblNAsContacts_1.Contact;
The joins to the two tables are on different columns and how are we to know that there is no overlap with rows in the base table joining to both lookup tables?
inttblNAsContacts sounds like it should be the determining factor regarding final row count.
inttblNAsContacts sounds like it should be the determining factor regarding final row count.
ASKER
I just created two queries to do what I am looking for:
Query1:
And then I just ran them separately.
But if you see something or think it should be down differently please let me know?
Thanks for any help.
Query1:
SELECT DISTINCT USER_dbo_ams_group.PrimaryContact, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, IIf([USER_dbo_ams_group].[Name]=[USER_dbo_ams_contact_custom].[AltCompany],[USER_dbo_ams_group].[Name],[USER_dbo_ams_contact_custom].[AltCompany]) AS Expr5
FROM inttblNAsContacts AS inttblNAsContacts_1 INNER JOIN ((USER_dbo_ams_contact INNER JOIN (inttblNAsContacts INNER JOIN USER_dbo_ams_contact_custom ON inttblNAsContacts.Contact = USER_dbo_ams_contact_custom.contactID) ON USER_dbo_ams_contact.id = USER_dbo_ams_contact_custom.contactID) INNER JOIN USER_dbo_ams_group ON USER_dbo_ams_contact.orgID = USER_dbo_ams_group.id) ON inttblNAsContacts_1.Contact = USER_dbo_ams_group.primaryContact
WHERE (((IIf([USER_dbo_ams_group].[Name]=[USER_dbo_ams_contact_custom].[AltCompany],[USER_dbo_ams_group].[Name],[USER_dbo_ams_contact_custom].[AltCompany])) Is Not Null And (IIf([USER_dbo_ams_group].[Name]=[USER_dbo_ams_contact_custom].[AltCompany],[USER_dbo_ams_group].[Name],[USER_dbo_ams_contact_custom].[AltCompany]))<>"None"))
ORDER BY USER_dbo_ams_group.PrimaryContact;
Query2:SELECT DISTINCT USER_dbo_ams_contact.id, "Company" AS Expr1, "AltCompany" AS Expr2, "AltCompany" AS Expr3, "AltCompany" AS Expr4, IIf([USER_dbo_ams_group].[Name]=[USER_dbo_ams_contact_custom].[AltCompany],[USER_dbo_ams_group].[Name],[USER_dbo_ams_contact_custom].[AltCompany]) AS Expr5
FROM inttblNAsContacts AS inttblNAsContacts_1 INNER JOIN ((USER_dbo_ams_contact INNER JOIN (inttblNAsContacts INNER JOIN USER_dbo_ams_contact_custom ON inttblNAsContacts.Contact = USER_dbo_ams_contact_custom.contactID) ON USER_dbo_ams_contact.id = USER_dbo_ams_contact_custom.contactID) INNER JOIN USER_dbo_ams_group ON USER_dbo_ams_contact.orgID = USER_dbo_ams_group.id) ON inttblNAsContacts_1.Contact = USER_dbo_ams_group.primaryContact
WHERE (((USER_dbo_ams_contact.id) Not In (Select PrimaryContact From USER_dbo_ams_Group)) AND ((IIf([USER_dbo_ams_group].[Name]=[USER_dbo_ams_contact_custom].[AltCompany],[USER_dbo_ams_group].[Name],[USER_dbo_ams_contact_custom].[AltCompany])) Is Not Null And (IIf([USER_dbo_ams_group].[Name]=[USER_dbo_ams_contact_custom].[AltCompany],[USER_dbo_ams_group].[Name],[USER_dbo_ams_contact_custom].[AltCompany]))<>"None"))
ORDER BY USER_dbo_ams_contact.id;
And then I just ran them separately.
But if you see something or think it should be down differently please let me know?
Thanks for any help.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Great thanks
in QBE view, draw the correct join lines to connect the tables. You will probably have to use LEFT JOIN's if the tables are optional.
PS - your table names are not long enough :)