【问题标题】:LEFT OUTER JOIN with four tableLEFT OUTER JOIN 与四个表
【发布时间】:2014-10-23 10:11:21
【问题描述】:

这是表结构

用户表

Column  
fb_id   
email   
name    
fname   
lname   
gender  
fb_link 
created

参考表

Column
id  
referred_by 
joinee  
created

目前实现的一个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

以上查询结果

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

这里是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

以上查询结果

joinee_fb_id        referer_fb_id       joinee_name referer_name
10154430845000507   1518673071699780    Saselsdein  Bsdasd

我正在寻找的是我在输出中需要joinee_namereferer_name 中的名称。但是我不能像我在示例 1 中那样在LEFT OUTER JOIN 子句中使用四个表

预期结果

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

【问题讨论】:

  • LEFT OUTER JOIN为什么不能用四张表?
  • FROM users u_joinee, users u_referer, referral r_j, referral r_r 等价于FROM users u_joinee CROSS JOIN users u_referer CROSS JOIN referral r_j CROSS JOIN referral r_r。您需要将每个 , 运算符替换为 INNEROUTER 加入。
  • @Barmar 因为我使用同一张表两次 users u_joinee, users u_referer, referral r_j, referral r_r 检查用户表

标签: mysql sql tsql join left-join


【解决方案1】:

您可以通过为 users 表赋予不同的别名来连接它两次,就像使用隐式内部连接一样。

我认为你不需要加入referral 两次。 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

【讨论】:

  • 非常感谢您的帮助 .. 这是您需要在 ans 中进行的一项更新,删除产生无效列错误的不需要的下划线 (u_joinee_.fb_id)
猜你喜欢
  • 2014-07-19
  • 2010-09-29
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多