纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

MySQL查询列必须和groupby字段一致吗?

6月18日 倾城傷投稿
  目录场景:查询各部门薪水最高的员工。MySQLgroupby是如何决定哪一条数据留下的?那么targetlist和groupbycolumn不匹配就一定不能执行吗?
  MySQL版本:8。0。27场景:查询各部门薪水最高的员工。CREATETABLEemployee(idintNOTNULLAUTOINCREMENTCOMMENT主键ID,deptintNOTNULLCOMMENT部门,uservarchar(32)CHARACTERSETutf8COLLATEutf8generalciNOTNULLCOMMENT员工,salaryintNULLDEFAULTNULLCOMMENT薪水,isdeletedtinyint(1)NOTNULLDEFAULT0COMMENT是否删除,remarkvarchar(512)CHARACTERSETutf8COLLATEutf8generalciNULLDEFAULTNULLCOMMENT备注,modifytimedatetime(3)NOTNULLDEFAULTCURRENTTIMESTAMP(3)ONUPDATECURRENTTIMESTAMP(3)COMMENT修改时间,PRIMARYKEY(id)USINGBTREE)ENGINEInnoDBCHARACTERSETutf8COLLATEutf8generalciCOMMENT员工ROWFORMATDINSERTINTOemployeeVALUES(1,1,张三,1000,0,NULL,2021122309:20:19。606);INSERTINTOemployeeVALUES(2,1,李四,1500,0,NULL,2021122309:20:21。679);INSERTINTOemployeeVALUES(3,1,王五,2000,0,NULL,2021122309:20:23。371);INSERTINTOemployeeVALUES(4,2,赵六,1000,0,NULL,2021122309:21:59。373);INSERTINTOemployeeVALUES(5,2,孙七,1500,0,NULL,2021122309:22:15。000);
  SELECTFROM
  方法一:SELECTt1。FROMemployeet1LEFTJOINemployeet2ONt2。deptt1。deptANDt1。salaryt2。salaryWHEREt2。salaryISNULL;
  方法二:SELECTFROM(SELECTFROMemployeeORDERBYdept,salaryDESCLIMIT1000)tGROUPBY
  (不加limit可能会失效)
  看起来结果是一样的,但第二种其实是会有问题的。MySQLgroupby是如何决定哪一条数据留下的?
  MySQL通过sqlmode来提供SQL语句的合法性检查,
  在默认情况下,MySQL允许查询列targetlist中出现除了groupbycolumn、聚集函数等以外的表达式。
  但是,那些不参与groupby的字段具体会返回哪条数据的值在MySQL中是处于未定义规则的状态,
  MySQL不承诺一定会返回哪条数据。分组前的数据:
  SELECTFROMemployeeORDERBYdept,salaryDESCLIMIT1000;
  看起来方法二返回的是每个分组中的第一条的数据,
  但实际上还会与存储引擎、物理位置、索引等有关,
  如果是InnoDB的话,取决于在BTree上命中的第一条索引,
  这里不展开说明,毕竟不是安全的用法,
  有的时候可能返回的结果并不是我们想要的。
  关于BTree,可以看下这篇文章:
  通过BTree平衡多叉树理解InnoDB引擎的聚集和非聚集索引
  所以对于targetlist中出现的不明确的列,MySQL是不确定哪一条数据留下的。
  对于语法限制比较严格的数据库,都不支持targetlist中出现语义不明确的列,
  MySQL中提供了一个修正的sqlmode,ONLYFULLGROUPBY。SETSESSIONsqlmodeONLYFULLGROUPBY;
  再执行方法二的SQL就被拒绝了:SELECTFROM(SELECTFROMemployeeORDERBYdept,salaryDESCLIMIT1000)tGROUPBYdept1055Expression1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumnt。idwhichisnotfunctionallydependentoncolumnsinGROUPBYthisisincompatiblewithsqlmodeonlyfullgroupby时间:0s
  onlyfullgroupby模式下MySQL会对targetlist和groupbycolumn中的基础列、表达式、别名列进行严格匹配。那么targetlist和groupbycolumn不匹配就一定不能执行吗?
  我们看下另外一条SQL:订单CREATETABLEorder(orderidintNOTNULLAUTOINCREMENTCOMMENT订单ID,orderamountintNULLDEFAULTNULLCOMMENT订单金额,PRIMARYKEY(orderid)USINGBTREE)ENGINEInnoDBCHARACTERSETutf8COLLATEutf8generalciCOMMENT订单ROWFORMATDYNAMIC;INSERTINTOorderVALUES(1,100);INSERTINTOorderVALUES(2,103);INSERTINTOorderVALUES(3,100);订单明细CREATETABLEorderdetail(orderdetailidintNOTNULLAUTOINCREMENTCOMMENT主键ID,orderidintNOTNULLCOMMENT订单ID,goodsvarchar(32)CHARACTERSETutf8COLLATEutf8generalciNOTNULLCOMMENT商品名称,goodsamountintNOTNULLCOMMENT商品金额,PRIMARYKEY(orderdetailid)USINGBTREE)ENGINEInnoDBCHARACTERSETutf8COLLATEutf8generalciCOMMENT订单明细ROWFORMATDYNAMIC;INSERTINTOorderdetailVALUES(1,1,苹果,10);INSERTINTOorderdetailVALUES(2,1,橙子,20);INSERTINTOorderdetailVALUES(3,1,香蕉,70);INSERTINTOorderdetailVALUES(4,2,橘子,50);INSERTINTOorderdetailVALUES(5,2,菠萝,53);
  查询订单中所有商品SELECTt1。orderid,t1。orderamount,GROUPCONCAT(t2。goods,t2。goodsamount)FROMordert1LEFTJOINorderdetailt2ONt2。orderidt1。orderidGROUPBYt1。
  这条SQL的targetlist和groupbycolumn并不是严格匹配的,但是也可以执行,
  注意
  t1。orderid是订单表的主键。
  所以在onlyfullgroupby模式下,如果MySQL可以确定targetlist中所有列的返回值,
  那么,即使targetlist和groupbycolumn中的基础列、表达式、别名列等不严格匹配,
  MySQL也会认为它的语义是明确的,因此该条语句可以顺利通过。
  原文http:www。cnblogs。comcaptaincatp15723369。html
投诉 评论 转载

海天味业(二)成长的秘诀提价控费和规模效应上篇在纯财务数据层面对海天做了一个概览式的分析。在阅读了海天的招股书和2014年2月上市至今所有年报之后,这篇继续聊一些海天令人印象深刻的东西,特别是增利比增收更多的秘密。……MySQL查询列必须和groupby字段一致吗?目录场景:查询各部门薪水最高的员工。MySQLgroupby是如何决定哪一条数据留下的?那么targetlist和groupbycolumn不匹配就一定不能执行吗?MyS……张恒二审装疯卖傻,把责任甩给网友,与他无关郑爽跟张恒的抚养权案开庭,不少庭审资料相继曝光,相信大家这两天看得也不少了。不管是精神问题还是郑爽不让他回国,都通过昨天的对话记录被一一推翻,不少人都对张恒这个男人大为震惊。让……全国增设29个国家进口贸易促进创新示范区新华社北京11月3日电(记者谢希瑶)商务部3日对外公布,商务部、国家发展改革委等8部门决定,在全国增设29个国家进口贸易促进创新示范区。商务部外贸司负责人表示,主动扩大进……百亿票房的背后,实则是注水的尴尬,求求这6位演员别再吹了文2号探秘人编辑2号探秘人不知从何时起,娱乐圈开始拼票房不拼演技了,仿佛只要带得动票房的人,就说明这个人有实力、演技又好。看着网上那些被粉丝大力吹捧的百亿票房……我终于迎来了暖气烫手的季节这个图好有趣啊本来因为情绪低落而持续性的文章输出,最终却因为一个偶然而来的1w而突然终止。不过好在,我们终于迎来了暖气烫手的季节。我本以为,暖气烫手,必然屋内……所有让你不舒服的关系,都是磁场不合你有没有过这样的感觉?有些人,一见面就倍感亲切;但有些人,即使天天呆在一起,也觉得冷漠疏离。其实,这都是人与人之间磁场的作用。你是什么样的人,就会吸引什……特战荣耀最强女狙击手登场,喝煤油吃蚂蚁卵,是真狠人由杨洋、李一桐、蒋璐霞等主演的电视剧《特战荣耀》正在播出,剧情是真的越来越好看。在努力之下,燕破岳成功进入猎豹突击队的选拔,这次选拔总共有六十个人参加,最终只会留下六个人,成为……欧冠八分之一决赛,巴黎圣日耳曼vs皇马当日,在法国巴黎进行的20212022赛季欧冠联赛八分之一决赛首回合比赛中,法国巴黎圣日耳曼队主场以1比0战胜西班牙皇家马德里队。2月15日,皇家马德里队门将库尔图瓦(后……生殖器疱疹能根治吗?有些患者确诊得了生殖器疱疹,是很痛苦的,现在也已经在用药了,想要知道,得了生殖器疱疹还能不能完全根治呢?生殖器疱疹是可以根治的,患者一定要做到及早发现尽早治疗,而且还需要……集成灶怎么选?集成灶十大科技创新品牌榜单发布!新时代下,高质量发展成为全面建设社会主义现代化国家的首要任务。加强科技创新、品牌建设是实现高质量发展的内在要求。在国家层面强力的领导下,集成灶行业各企业也在不断的加强自主研发,……保安全保交楼保刚兑,2022年碧桂园表现继续稳健房地产行业此番经历寒冬时间之长,超出所有人的想象。过去一年,销售低迷、疫情反复、信心不足、房企大面积暴雷。不过,在这场近20年来未有的行业大考中,示范生碧桂园凭借强力而稳健的财……
我和五羊杯凉了7年的快播,登上排行榜第一传奇程序员卡神离职Meta,曝老东家效率低GPU利用率5真是徐云626,出峡谷入塔乡,未闻杏花香品西瓜谈流浪,卧听叶尔羌vivoY77强悍升级,vivoT1瞬间再创低价神话致敬6个小建议,送给容易纠结的你本赛季,广东宏远拿七个第一,辽宁男篮无一项登顶MinecraftLive2021,将宣布三个重大事项!你准孙杨获某平台最具期待奖,体育总局反兴奋剂规定让期待终成空34!国乒21岁黑马遗憾丢冠,3次领先惨遭逆转,目送恶人登顶央视频之夜官宣主持人阵容,王冰冰正式复出,尼格买提朱迅加盟2023年2月7日IOS的AppStore软件限免5个APP摩天轮的爱情二我的偶像金字塔隐藏的十大神奇奥秘天问的原文和译文孟子尽心章句下第九节原文及译文如何防治乳腺癌?营养师提醒这8项饮食建议您要早知道关于赞美菊花的素材汇总微软永久关闭实体零售店寅叶子讲述猎人与狐狸的故事降龙木是什么为什么可以大破天门阵晚上太卖力邻居透露了秘密老公大怒呵斥道法律上规定的什么是妇女绑架罪?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形