当没有来自其中一个连接表的行可用时,左连接不返回任何行

时间:2013-01-25 13:36:49

标签: mysql

SELECT * 
FROM `user` 
LEFT JOIN `user_group` 
  ON `user_group`.`userid` = `user`.`userid` 
LEFT  JOIN `email_template` 
  ON `email_template`.`user_id`=`user`.`userid` 
WHERE `user`.`agent_id`='123' 
 AND `email_template`.`type`='advertise'

那是我的sql语句。我正在加入表用户,用户组和email_template。问题是我所查询的用户表中没有类型为advertise的email_template,因此整个查询不返回任何行。相反,我想要1行,其中email_template类型为null。

2 个答案:

答案 0 :(得分:1)

您是否尝试将email_template过滤器移至连接条件?

这样做会在连接上应用过滤器而不是WHERE子句。如果您在WHERE上应用过滤器,那么您基本上执行INNER JOIN,如果没有符合条件,则不会返回任何行:

SELECT * 
FROM `user` 
LEFT JOIN `user_group` 
  ON `user_group`.`userid` = `user`.`userid` 
LEFT  JOIN `email_template` 
  ON `email_template`.`user_id`=`user`.`userid` 
  AND `email_template`.`type`='advertise'
WHERE `user`.`agent_id`='123' 

答案 1 :(得分:1)

移动条件以在您加入时选择email_templatetype='advertise'。基本上WHERE子句会导致记录被过滤,但它在条件上匹配。

SELECT  * 
FROM    `user` 
        LEFT JOIN `user_group` 
          ON `user_group`.`userid` = `user`.`userid` 
        LEFT  JOIN `email_template` 
          ON `email_template`.`user_id`=`user`.`userid` AND 
                `email_template`.`type`='advertise'
WHERE   `user`.`agent_id`='123'