sql statement select what cant be joined

Hi,

I have 2 tables:


**** TableA ****

NameA    valueA
-------  --------
john     10
mary     20
jack     30
tom       5

Open in new window


*** TableB ****

NameB    valueB
-------  --------
Sarah    10
Thomas   30
Ive      9

Open in new window


I know how to join this tables and get the ones that have the same value, I do it this way and get the following data:

select * from tableA inner join tableB on tableA.valueA = tableB.valueB

John 10 Sarah 10
Jack 30 Thomas 30

Open in new window


Questions:

Q1. How do I get only the ones present in table A, in this example:
   
   
Tom 5
    Mary 20

Open in new window


Q2. How do I get only the ones present in table B, in this example:

   
Ive 9

Open in new window

jsbxAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Steve WalesSenior Database AdministratorCommented:
There are several ways to get this data, have a read of this article: How to find rows that are in one table, but not another which shows you several ways to do it.

You can use NOT IN, NOT EXISTS, a LEFT JOIN checking for NULL values or the EXCEPT operator (for SQL Server)
0
Philip PortnoySr. MS SQL DBA and Technical Account ManagerCommented:
Do you have a unique value in the tables? If you do then it's very easy.
Let's assume your name is a unique value.

For these values from tableA:
select * from tableA where name NOT IN (select tableA.name from tableA inner join tableB on tableA.valueA = tableB.valueB) AND name NOT IN (select tableB.name from tableA inner join tableB on tableA.valueA = tableB.valueB)

Open in new window


For values from tableB:
select * from tableB where name NOT IN (select tableA.name from tableA inner join tableB on tableA.valueA = tableB.valueB) AND name NOT IN (select tableB.name from tableA inner join tableB on tableA.valueA = tableB.valueB)

Open in new window


Please note that the fact that I don't know your database structure and what's the data in there this code is really "dirty" and might require optimization.
0
jsbxAuthor Commented:
testing ...
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

awking00Commented:
As pointed out there are severla ways to do this. Here is one -
For Q1
select * from tableA
where valueA in
(select valueA from tableA except select valueA from tableB)

For Q2
select * from tableb
where valueb in
(select valueB from tableB except select valueA from tableA)
0
Scott PletcherSenior DBACommented:
This query will show you the full combination -- both, or either one -- and which table, or both, had data:


SELECT
    COALESCE(a.nameA, b.nameb) AS Name,
    COALESCE(a.valueA, b.valueB) AS Value,
    CASE
        WHEN a.nameA IS NULL THEN 'Only in B'  --or 'Missing from A'
        WHEN a.nameB IS NULL THEN 'Only in A'  --or 'Missing from B'
        ELSE 'In both A and B' END  --or 'Not missing in either'
        AS In_Which_Table
FROM tableA a
FULL OUTER JOIN tableB b ON
    b.nameB = a.nameA
ORDER BY Name
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
awking00Commented:
And another way -
select * from TableA as a
where not exists
(select 1 from tableB as b
 where a.valueA = b.valueB)

select * from TableB as b
where not exists
(select 1 from tableA as a
 where a.valueA = b.valueB)
0
jsbxAuthor Commented:
Thanks to all.
jsbx
0
PortletPaulfreelancerCommented:
Was this homework? I'm surprised no-one asked.

I'm also surprised no-one offered this: the visual chart available here is very useful
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
0
jsbxAuthor Commented:
No it wasn't.
I just simplified the question in order to avoid misunderstandings since english is not my native lang.
Jsbx
0
jsbxAuthor Commented:
Portlet paul
Anyway the article you pointed is remarkable.  Thanks.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.