Solved

SQL Left join, how to include empty rows

Posted on 2003-11-13
8
1,465 Views
Last Modified: 2012-06-27
I have got the following 2 tables:

amounts
--------
userfk
transfk
amount

AND

users
-------
userid
name

I would like to have a query, that returns for a certain transfk ALL users with either the amount or a NULL value. For example: I have got 3 users, for transfk = 14 only 2 users have got an amount:

userid  name    amount  transfk
------  -------     ------      --------
1       Ronald         3       14
2       John            4       14
3       Austin        NULL    14

What query do I have to perform. To make it a bit clearer, the tables contain the following values:

amounts:
userfk   transfk   amount
-------  --------  --------
1        14        3
2        14        4
2        17        1

users:
userid   name
-------  ----------
1        Ronald
2        John
3        Austin

Any suggestions?
0
Comment
Question by:dutchdevelopment
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 23

Expert Comment

by:adathelad
Comment Utility
Hi,

This should dot it:

SELECT userid, name, amount
FROM users
     LEFT JOIN amounts ON userid = userfk
WHERE transfk IS NULL or transfk = 14

Cheers
0
 

Author Comment

by:dutchdevelopment
Comment Utility
Unfortunately this won't work in all cases.

It'll work in this case because both users 1 and 2 have an entry for transfk = 14 and user 3 doesn't have an entry at all.

But when you do the same for transfk = 17 you will get no entry for user 1 (Ronald):

userid  name    amount  transfk
------  -------     ------      --------
2       John            1        17
3       Austin        NULL    17

Any clues?
0
 
LVL 12

Accepted Solution

by:
koutny earned 250 total points
Comment Utility
SELECT userid, name, amount
FROM users
     LEFT JOIN amounts ON (userid = userfk AND transfk = 14)
0
 

Author Comment

by:dutchdevelopment
Comment Utility
Thanks all.

I have used the answer of koutny as a starter with the following added:

SELECT userid, name, amount
FROM users
LEFT JOIN amounts ON (users.userid = amounts.userfk AND amounts.transfk = 17 OR amounts.transfk IS NULL)
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 51

Expert Comment

by:Julian Hansen
Comment Utility
This might do it (modify fields you need to see)

select * from users left join
(
SELECT userid, name, amount, transfk
FROM users
     LEFT JOIN amounts ON userid = userfk
WHERE transfk IS NULL or transfk = 14
) A on A.name = users.name

0
 
LVL 12

Expert Comment

by:koutny
Comment Utility
Hi, I don't think that any addition or modificiation is needed.
It is the property of the LEFT OUTER JOIN that it will return ALL records from the table on the left side on the join (i.e. users) and it will fill in the remaining columns from the table on the right side of the join if the the ON (...) condition is true, otherwise it will fill those columns with null values.
0
 
LVL 51

Expert Comment

by:Julian Hansen
Comment Utility
You are right - delayed post on my part. I opened this thread before your response and obviously replied after you. We have such slow lines here that tomorrow and next week mean the same thing ;)

Your post is much better - simplier.
0
 

Author Comment

by:dutchdevelopment
Comment Utility
koutny:
It is necessary to add the modification (at least in MS Access 2000).
I think that the addition of amounts.transfk = 17 has undone the "return ALL records"-effect of a LEFT OUTER JOIN.
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

APEX (Application Express) is used to develop a web application from Oracle. SQL Workshop is one of the tools that comes with Oracle APEX to query or modify the database objects or to make any changes to the structure.
Read about achieving the basic levels of HRIS security in the workplace.
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now