2
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 类型列为空。

4

2 回答 2

4

您是否尝试将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' 
于 2013-01-25T13:40:20.620 回答
2

移动条件以选择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' 
于 2013-01-25T13:40:46.113 回答