未添加右表查询条件的场景:
SELECT `o`.`id` '左表ID',`u`.`uid` '右表ID',`u`.`channel` '右表查询条件'
FROM `basic_order` `o` LEFT JOIN `basic_user` `u` ON `o`.`user_id`=`u`.`uid`
WHERE `o`.`create_time`>='1667232000' AND `o`.`create_time`<='1667318400'
ORDER BY `o`.`id` DESC;

添加了右表查询条件的场景(增加了一个 `u`.`channel` NOT IN ('umeng') 的查询条件):
SELECT `o`.`id` '左表ID',`u`.`uid` '右表ID',`u`.`channel` '右表查询条件'
FROM `basic_order` `o` LEFT JOIN `basic_user` `u` ON `o`.`user_id`=`u`.`uid`
WHERE `o`.`create_time`>='1667232000' AND `o`.`create_time`<='1667318400'
AND `u`.`channel` NOT IN ('umeng')
ORDER BY `o`.`id` DESC;

查询结果是,右表为空的左表数据也被过滤了。
解决方法(增加一个 `u`.`channel` IS NULL 的查询条件,把空的数据加回来):
SELECT `o`.`id` '左表ID',`u`.`uid` '右表ID',`u`.`channel` '右表查询条件'
FROM `basic_order` `o` LEFT JOIN `basic_user` `u` ON `o`.`user_id`=`u`.`uid`
WHERE `o`.`create_time`>='1667232000' AND `o`.`create_time`<='1667318400'
AND (`u`.`channel` NOT IN ('JTEST','umeng') OR `u`.`channel` IS NULL)
ORDER BY `o`.`id` DESC;


图一是没有添加右表查询条件的;图二是添加了右表查询条件;右表为空的左表数据加回来了。
本文探讨了在进行SQL左连接查询时如何正确添加右表查询条件,以避免误删空值记录的问题,并提供了解决方案。
1587

被折叠的 条评论
为什么被折叠?



