问题
当使用lefJoin语句连表时,如果把条件语句写在了WHERE中会导致连表查询失败,如:
SELECT
`article`.`id` AS `id`,
`zan`.`article_id` AS `zan_article_id`,
FROM
`articles` `article`
LEFT JOIN `article_likes` `zan` ON `zan`.`article_id` = `article`.`id`
AND ( `article`.`id` = `zan`.`article_id` AND `zan`.`del_time` IS NULL )
WHERE
( `zan`.`is_del` = ? )
GROUP BY
`article`.`id`,
ORDER BY
...
这是由于WHERE语句会跟着主表(也就是article表)走,但是在主表中是没有右表中的字段的,所以会报错。
解决方法
把要限制的条件(限制右表的条件)写在ON后面,这样就可以在连表之前过滤掉右表的数据,然后进行连表,如:
SELECT
`article`.`id` AS `id`,
`zan`.`article_id` AS `zan_article_id`,
FROM
`articles` `article`
LEFT JOIN `article_likes` `zan` ON `zan`.`article_id` = `article`.`id`
AND ( `article`.`id` = `zan`.`article_id` AND `zan`.`is_del` = ? AND`zan`.`del_time` IS NULL )
GROUP BY
`article`.`id`,
ORDER BY
...