bhushya
bhushya

Reputation: 1317

LEFT OUTER JOIN with four table

Here is the table structure

User table

Column  
fb_id   
email   
name    
fname   
lname   
gender  
fb_link 
created

referral table

Column
id  
referred_by 
joinee  
created

Currently implemented one SQL is (Example 1)

SELECT u.fb_id
    ,fb_link
    ,name
    ,r.referred_by
    ,u.created 
FROM users u 
LEFT OUTER JOIN referral r 
    ON u.fb_id=r.joinee

result of above query

joinee              referer
10152250261037651   NULL
10152604594389921   NULL
10154430845000507   1518673071699780
....
....
....
....
547146735389782     NULL

Here is the sql (Example 2)

SELECT u_joinee.fb_id joinee_fb_id
    ,u_referer.fb_id referer_fb_id
    ,u_joinee.NAME joinee_name
    ,u_referer.NAME referer_name
FROM users u_joinee
    ,users u_referer
    ,referral r_j
    ,referral r_r
WHERE u_referer.fb_id = r_r.referred_by
    AND u_joinee.fb_id = r_j.joinee

result of above query

joinee_fb_id        referer_fb_id       joinee_name referer_name
10154430845000507   1518673071699780    Saselsdein  Bsdasd

What I am looking out for is I need both name in joinee_name and referer_name in the output. But I ma not able to use four tables in LEFT OUTER JOIN clause like i did for example 1 I want to fetch both records which include both non referral and referral joinees Is there any way to expect required result as shown below

Expected result

joinee_fb_id        referer_fb_id       joinee_name referer_name
10154430845000507   1518673071699780    Saselsdein  Bsdasd
10154430845000347   Null                asd         NULL
10154430845000567   Null                asd asdm    NULL
10154230845000567   Null                Dsd asdm    NULL
10154330845000567   Null                sdm         NULL
101544553045000567  Null                Esd aedm    NULL

Upvotes: 0

Views: 363

Answers (1)

Barmar
Barmar

Reputation: 780663

You can join with the users table twice by giving it different aliases, just like you do with your implicit inner join.

I don't think you need to join with referral twice. A single row in the referral table links a referrer and a joinee.

SELECT u_joinee.fb_id joinee_fb_id ,u_referer.fb_id referer_fb_id, u_joinee.name joinee_name, u_referer.name referer_name
FROM users AS u_joinee
LEFT JOIN referral AS r ON r.joinee = u_joinee.fb_id
LEFT JOIN users AS u_referer ON r.referred_by = u_referer.fb_id

Upvotes: 2

Related Questions