2021
10-01
10-01
解决Mysql的left join无效及使用的注意事项说明
Mysql的leftjoin无效及使用今天写sql发现使用leftjoin没有把左边表的数据全部查询出来,让我郁闷了一会,后来仔细研究了一会才知道自己犯了个常识性的错误(我是菜鸟)这是原sql这样的查询并不能将tb_line这张表的数据都查询出来,好尴尬...后面我才知道原来当我们进行多表查询,在执行到where之前,会先形成一个临时表而on就是临时表中的条件筛选,使用leftjoin则不管条件是否为真,都会查询出左边表的数据,条件为假的,则显示...
继续阅读 >
在日常优化过程中,发现一个怪事情,同一个SQL出现两个完全不一样执行计划,leftjoin连驱动表都可以变成不一样。对于leftjoin,如果where条件里有被关联表过滤,leftjoin有可能被转成innerjoin,本案例中shopInfo有ShopCategory='LOC'过滤条件;保证shopInfo的记录非NULL,因此leftjoin在优化过程中可以转为innerjoin。那么O和S的JOIN顺序就是可以交换的。验证结论:创建表:--班级表CREATETABLET_CLASS(class_idi...
当前需求:有group和factor两张表,一个group对应多个factor,现在想查询有效的group和对应的有效的factor,两个表都有isDel逻辑删除标志。最开始的错误写法一:SELECTg.*,f.*FROMgroupsgLEFTJOINfactorfONf.groupId=g.idwhereg.isDel=0andf.isDel=0LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。上边这样写左边表要是在右边表没有对应数据是查询不出来的...
一个我写的实例:其中多表连接,一共连接了3个表。使用聚集函数SUM,用到了GROUPBYSELECT a.[UserID],b.[Name],sum (c.[Money]+c.[Bank])as TotalMoneyFROM Table1 a(nolock) LEFT JOIN Table2 b(nolock) on a.[UserID] = b.[UserID] LEFT JOIN Table3 c(nolock) ON b.[UserID]=c.[UserID] WHERE a.[Use...