SQL关联条件在查询语句中不同位置查询不同结果

前提:A表关联B表,要求A表中符合条件的数据全部展示,B表中符合条件展示,不符合条件补空,简单来说就是一个left join,但是关联条件位置不同可能会影响筛选结果,代码如下:

--code1
	SELECT  A.GRADE,A.NAME,B.CLASS
	FROM A
	LEFT JOIN B
	ON A.NAME = B.NAME
	AND B.CLASS = '1'
	WHERE A.GRADE = '6'

--code2
	SELECT  A.GRADE,A.NAME,B.CLASS
	FROM A
	LEFT JOIN B
	ON A.NAME = B.NAME
	WHERE A.GRADE = '6'
	AND B.CLASS = '1'

上述两段sql代码分别把B表的限制条件放在了关联条件和WHERE条件中,区别在于:
前者在关联时,先用name字段与A表关联,如果有符合B.CLASS = '1’的数据,则展示相关B表信息,否则将B表相关信息补空;
后者在关联时,用name字段与A表关联,然后再对关联结果进行筛选,展示A.GRADE = ‘6’,同时满足B.CLASS = '1’的数据,若A.GRADE = ‘6’,但是B.CLASS <> ‘1’,则会被剔除,那么那些A表可以取到数据,B表不符合B.CLASS = '1’补空的数据就会丢失,
导致查询结果丢失部分数据。

综上,按照规范的查询格式,推荐code1筛选条件方式,即主表A筛选条件放在where中,关联副表条件放在关联条件中。
在这里插入图片描述
主表卡where,副表卡关联。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值