Solved

SQL Left join, how to include empty rows

Posted on 2003-11-13
8
1,470 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +1
8 Comments
 
LVL 23

Expert Comment

by:adathelad
ID: 9738522
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
ID: 9738583
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
ID: 9738624
SELECT userid, name, amount
FROM users
     LEFT JOIN amounts ON (userid = userfk AND transfk = 14)
0
Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

 

Author Comment

by:dutchdevelopment
ID: 9738640
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
 
LVL 57

Expert Comment

by:Julian Hansen
ID: 9738836
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
ID: 9738907
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 57

Expert Comment

by:Julian Hansen
ID: 9739489
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
ID: 9740918
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

Upcoming Webinar: Securing your MySQL/MariaDB data

Join Percona’s Chief Evangelist, Colin Charles as he presents Securing your MySQL®/MariaDB® data on Tuesday, July 11, 2017 at 7:00 am PDT / 10:00 am EDT (UTC-7).

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Read about achieving the basic levels of HRIS security in the workplace.
This article shows the steps required to install WordPress on Azure. Web Apps, Mobile Apps, API Apps, or Functions, in Azure all these run in an App Service plan. WordPress is no exception and requires an App Service Plan and Database to install
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…
This is a high-level webinar that covers the history of enterprise open source database use. It addresses both the advantages companies see in using open source database technologies, as well as the fears and reservations they might have. In this…

691 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