简体   繁体   中英

Sql Join Query using MS Access

Hello I Have a problem in getting rows from one table after comparing both. Detail of Both Table are as follows:-

I am using Ms Access database.

TableA is having a data of numeric type (Field Name is A it is primary key)
----------
 Field A
==========
  1
  2
  3
  4
  5

Table B is having data of numeric type ( Field Name is A it is foreign key)
--------
Field A
========
  2
  4

Now I am using below query which is this

select a.a 
    from a a
        , b b 
    where a.a <> b.b

I want to show all the data from Table A which is not equal to Table B. But the above query is not working as I described.

Can you help me in this regard.

Regards,

Fawad Munir

In an attempt at clarity, I've used upper case for tables and lower case for fields:

Select A.a
FROM A LEFT OUTER JOIN B ON A.a=B.b
WHERE B.b is null

This will show all the records in A that are not in B (I assume that's what you want).

Read up on Access outer joins. In the query designer you double click the join and select something like "all records from table a and only the matching records in table b".

In your question you said that the name of the field in table B is 'A'. Given that, I'd say that your query should be something like

select a.a
  from a, b
  where a.a <> b.a

But I'm not sure this will do what you want. I think you're trying to find rows in table A which do not have a matching row in table B, in which case you might try

SELECT A.A
  FROM A
LEFT OUTER JOIN B
  ON (B.A = A.A)
WHERE B.A IS NULL

Try that and see if it does what you want.

Share and enjoy.

I don't know exactly if Access would accept the syntax, but here how I would do in SQL Server.

select a.a
    from TableA a
    where a.a NOT IN (
        select b.a
            from TableB b                
    )

or even as above-mentioned:

select a.a
    from TableA a
        left outer join TableB b on b.a = a.a
    where b.a IS NULL

Its not entirely clear what you are trying to achieve, but its sounds like you are attempting to solve the common problem of finding rows in Table A missing associated data in Table B. If this is the case, it appears you misunderstand the semantics of the join you tried. In which case, you have 2 problems, because the understanding the the JOIN operation is critical to working with relational databases.

In relation to the first problem, please research how to express a subquery using the IN operator. Something like

...  WHERE a NOT IN (SELECT a from b)

In relation to the second problem, try your query without the WHERE restriction, and see what is returned. Once you understand what the join is doing, you will see why applying a WHERE restriction to it will not solve your problem.

If I understand you correctly, you want to see every row in A for which column a contains a value that cannot be found in any column b value of B. You can get this data in several ways.

I think using NOT IN is the clearest, personally:

 SELECT * FROM tableA WHERE columnA NOT IN 
   (SELECT columnB FROM tableB WHERE columnB IS NOT NULL)

Many people prefer a filtered JOIN:

 SELECT tableA.* FROM tableA LEFT OUTER JOIN tableB
    ON tableA.columnA = tableB.columnB WHERE tableB.columnB IS NULL

There is a NOT EXISTS variant as well:

 SELECT * FROM tableA WHERE columnA NOT EXISTS
   (SELECT * FROM tableB WHERE columnB = tableA.columnA)

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