简体   繁体   English

左外连四桌

[英]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) 当前实现的一种SQL是(示例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) 这是sql(示例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. 我在找出来是我需要两个名称joinee_namereferer_name输出。 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 但是我无法像我在例1中那样在LEFT OUTER JOIN子句中使用四个表,我想同时获取包括非引用和引用联接的记录,是否有任何方法可以期望所需的结果,如下所示

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

You can join with the users table twice by giving it different aliases, just like you do with your implicit inner join. 您可以通过为users表赋予不同的别名来两次与users表联接,就像对隐式内部联接一样。

I don't think you need to join with referral twice. 我认为您不需要两次加入referral A single row in the referral table links a referrer and a joinee. referral表中的单行链接了一个推荐人和一个参与者。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM