简体   繁体   中英

Having issues using a Right Join in MS Access 2010 with two tables that have the same fields

I have two tables, Table A and Table B. Each table have 4 fields, the name of the fields are the same for both. Both tables are extracted from other tables, and each record acts as a primary key.

I want to write a query in MS Access 2010 that gets the data unique to Table B and not shared with Table A. I am using the following image as a reference, and it looks like I need to do a Right Join.

在此处输入图片说明

Hello. There is something not right with my SQL, I've tested it and I am getting the incorrect result. Below is the closest I've gotten:

SELECT DISTINCT TableB.*
FROM TableB RIGHT JOIN TableA ON (TableB.Field1 = TableA.Field1) AND (TableB.Field2 = TableA.Field2) AND (TableB.Field3 = TableA.Field3) AND (TableB.Field4 = TableA.Field4)
WHERE (((TableA.Field1) Is Null));

I think it would be clearer for you to use not exists :

select tableb.*
from tableb
where not exists (select 1
                  from tablea
                  where (TableB.Field1 = TableA.Field1) AND (TableB.Field2 = TableA.Field2) AND (TableB.Field3 = TableA.Field3) AND (TableB.Field4 = TableA.Field4)
                 );

Your use of RIGHT JOIN is incorrect. As phrased, you want a LEFT JOIN . That is, you want to keep all rows in the first table (the "left" table in the JOIN ) regardless of whether or not a match exists in the second table. However, the NOT EXISTS does the same thing and the logic is a bit clearer.

You want to have right join if tablea is in your select statement, but as you have

SELECT DISTINCT TableB.*

you may want to have a left join instead. My suggestion would be changing your code from right to left join. TableB acts like table A from venn diagrams above.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM