2013-01-25 50 views
1
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。问题是,我查询没有email_template类型的广告在表格中整个查询返回行用户。相反,我想要1行,email_template类型列为空。当连接表中没有一行可用时,左连接不返回行

回答

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

移动的条件来选择你要加入的时间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'