mysql左连接null值丢失、条件不起作用的问题

一、问题

在mysql左连接时,

  • 写上where时,空值丢失,数据减少
  • 不写where,只用and连接,主表条件不起作用,数据变多。

二、错误复现

1、当使用where+条件时,左连接查询空值丢失

SELECT u.id, u.authority_type, sum(complete_value)
FROM  USER as u LEFT JOIN  `performance_assess` p
ON p.user_id = u.id 
where  p.assess_time>'2020-09-01 12:00:00'
and u.authority_type = "USER"
 GROUP BY u.id 

结果:空值丢失,数据变少
在这里插入图片描述
2、当使用and连接条件而不写where,左表条件不其作用

SELECT u.id,u.authority_type,sum(complete_value)
FROM  USER as u LEFT JOIN  `performance_assess` p
ON p.user_id = u.id 
and  p.assess_time>'2020-09-01 12:00:00'
and u.authority_type = "USER"
 GROUP BY u.id 

结果:空值存在,但user的条件不起作用,数据变多
在这里插入图片描述

三、解决办法

通过on … and … where … 实现,

  • on后面跟连接条件
  • and后面跟从表条件:空值会被保留,多个从表条件时就and …and …
  • where后面跟主表条件:过滤主表数据, 多个主表条件时就where…and …
SELECT u.id,u.authority_type,sum(complete_value)
FROM  USER as u LEFT JOIN  `performance_assess` p
ON p.user_id = u.id 
and  p.assess_time>'2020-09-01 12:00:00'
where u.authority_type = "USER"
 GROUP BY u.id 

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值