国内做外贸如何访问外国网站,企业网络建设,wordpress让代码高亮,网站里面添加支付怎么做相信刚接触mysql的时候#xff0c;可能遇到以下的情况#xff1a;
标准查询关键字执行顺序为 FROM-WHERE-GROUP BY-HAVING-ORDER BY
LEFT JOIN 是在 FROM 范围内 所以先 ON 条件筛选表,然后两表再做 LEFT JOIN
而对于 WHERE 来说是在 LEFT JOIN 结果再次筛…相信刚接触mysql的时候可能遇到以下的情况
标准查询关键字执行顺序为 FROM-WHERE-GROUP BY-HAVING-ORDER BY
LEFT JOIN 是在 FROM 范围内 所以先 ON 条件筛选表,然后两表再做 LEFT JOIN
而对于 WHERE 来说是在 LEFT JOIN 结果再次筛选
一、场景及要求
A表有三条数据对应1、2、3B表有两条数据对应1、2A表中的1对应 B表的1A表中3对应B表的2。我想过滤数据条件是A.id ! 1 B.name ! xx得到A表中的2。 A表 id name age 1 张三 12 2 李四 24 3 王二 13 B表 id a_id name 1 1 ss 2 3 xx 二、错误的实现 select a.id as aid,a.name as aname,a.aage as age.b.id as bid,b.name as bname form A as a left join B as b on b.a_id a.id where a.id !1 and b.name ! xx 从语义上理解根据a.id !1和b.name ! xx是可以查询到想要的数据。但是这个sql运行之后你什么都得不到。为什么那 我先来看看mysql怎么执行这条sql语句的。 第一步先执行select a.id as aid,a.name as aname,a.aage as age.b.id as bid,b.name as bname form A as a left join B as b on b.a_id a.id生成一张AB临时表 AB表 aid aname aage bid bname 1 张三 12 1 ss 2 李四 24 NULL NULL 3 王二 13 2 xx 第二步执行where之后的条件筛选AB表中的数据为空 你可能对aid2这条记录不满足条件有疑问原因是aid 2这一行中有关b表的数据都是不存在的所以数据库不会对这行数据进行搜索匹配。我的理解是bid和bname的是值为NULL不是null 三、正确实现方案 select a.id as aid,a.name as aname,a.aage as age.b.id as bid,b.name as bname form A as a left join B as b on b.a_id a.id where a.id !1 and b.name ! xx or b.id is NULL) 执行顺序 第一步先执行select a.id as aid,a.name as aname,a.aage as age.b.id as bid,b.name as bname form A as a left join B as b on b.a_id a.id 生成一张临时表AB表AB表名称是随便取的 AB表 aid aname aage bid bname 1 张三 12 1 ss 2 李四 24 NULL NULL 3 王二 13 2 xx 第二步执行where之后的条件筛选AB表中的数据。 aid aname aage bid bname 2 李四 24 NULL NULL 参考文档 https://blog.csdn.net/minixuezhen/article/details/79763263 https://www.cnblogs.com/lzh007blog/p/7656428.html https://blog.csdn.net/sinat_30397435/article/details/52492272