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。
答案 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'