当前位置: 首页 > wzjs >正文

精通网站建设工资多少长沙sem培训

精通网站建设工资多少,长沙sem培训,代理注册公司哪里好,英文网站建设cms问题引入 主表 m(id 主键) 去 join 两张子表 c1、c2。 因笛卡尔集的原因,可能导致 m 表的一条记录在查询结果集中会出现多次;而我只需要 select m 表的字段即可,因此用 distinct 去除重复的行。 使用 distinct 的同…

问题引入

主表 m(id 主键) 去 join 两张子表 c1、c2。

因笛卡尔集的原因,可能导致 m 表的一条记录在查询结果集中会出现多次;而我只需要 select m 表的字段即可,因此用 distinct 去除重复的行。

使用 distinct 的同时,还需要 order by 排序,恰好排序的字段没有在 select distinct 中,因此可能会报错(以下的 SQL)。

可能会报错:查阅资料后了解到,order by 字段不在 select distinct 中,有些数据库是可以执行的。

select distinct m.id, m.name
from mleft join c1 on m.id = c1.m_idleft join c2 on m.id = c2.m_id
where 
...过滤条件...order by m.update_date desc

我的处理是,将排序的字段加到 select distinct 中,就不会报错了。

但请注意,并非所有情况都是这样改,这里只是恰好适合,怎么改还需具体情况具体分析(详见后文的分析)。

select distinct m.id, m.name, m.update_date
from mleft join c1 on m.id = c1.m_idleft join c2 on m.id = c2.m_id
where 
...过滤条件...order by m.update_date desc

原因

为什么 Distinct 与 Order By 同时使用时, order by 字段没有在 select distinct 中,会报错呢?


在 mysql 中,distinct 的执行顺序高于order by

distinct 先执行,对查询的记录进行去重,会产生一张临时表

之后执行 order by,对 distinct 产生的临时表做排序,得到结果。


因此,如果order by 字段没有在 select distinct 中,distinct 执行得到的临时表中根本没有 order by 字段,对临时表执行 order by 自然会报错。

解决

排序字段在重复行中唯一

如果去重前,重复的多行中,排序字段的值是唯一的;也就是对于重复的多行,排序字段的值始终都是相等的

那这时的处理方法是,将排序字段加入到 select distinct 中参与去重

为什么呢?

1)对于重复的多行,排序字段的值始终都是相等的。排序字段加入到 select distinct 中并不会影响到去重效果,因为 select distinct 新加入排序字段后,原本重复的多行、依然判断为是重复的。

2)select distinct 去重产生的临时表中,就会有排序字段,因此可以对去重得到的临时表进行排序。(临时表的解释见上文)

举个例子

见我在【问题引入】中举的例子,select distinct m.id, m.name 根据 id + name 去重,也就是如果结果中存在多行的 id + name 相同的话,只保留其中的一行;

而对于这样重复的多行,id 是一样的(id 主键,确保唯一),都对应着 m 表的同一条记录

这里重复多行的 m.update_date(排序字段)也是相同的(来自 m 表的同一条记录的 update_date),因此将 m.update_date(排序字段) 加入到 select distinct 中后,原本重复的多行、依然判断为重复的,不会影响到去重的效果。

所以,这里例子的处理方法为,将排序字段加入到 select distinct 中参与去重select distinct m.id, m.name, m.update_date

排序字段在重复行中不唯一

如果去重前,重复的多行中,排序字段的值不是唯一的;也就是对于重复的多行,排序字段的值可能是不同的、也就是可能有多个值的情况

那这时如果将排序字段直接加入到 select distinct 中,就不行了,因为这就会直接影响到 原本的去重逻辑

举个例子

举个例子,有 学生分数表 student_class 如下。

idnameclasspoints
1张三Chinese85
2张三English78
3张三Math92
4李四Chinese90
5李四English88
6李四Math75
select distinct name 
from student_class
where 过滤条件
order by points asc;

这里如果直接将 points 加到 select distinct 中select distinct name, points ,就改变了原本的去重逻辑。

原本根据 name 去重,结果只有 2 行,为所有的学生名字、并且确保唯一、不重复出现

改为select distinct name, points 后,同一个 name 可能有多条记录、并且其中的 points 值可能不同,根据 name + points 做去重,结果中同一个 name 值可能就会出现多次,改变了原本的去重逻辑。

根据实际业务逻辑进行处理

对于【排序字段在重复行中不唯一】的这种情况,目前我好像没有遇到过,但我感觉就是根据实际的业务逻辑去进行处理就好

比如,还是上面的表 student_class,我的需求是 查出所有的学生(不重复),并且学生间按照单科最好成绩 升序排

SQL 如下:

select name 
from student_class 
group by name 
order by Max(points) asc;

group by Name根据 name 分组后可以实现 name 的去重;同时,分组后 在 order by 中使用 Max 函数,来对每组中的最大分数(即个人单科最好成绩)进行排序,即实现了需求中的 按照每个人单科最好成绩 做排序。


如果有帮助的话,可以点个赞支持一下嘛🙏


文章转载自:

http://UYknOGSg.wdhhz.cn
http://d6WI19Bw.wdhhz.cn
http://1UjOE9sZ.wdhhz.cn
http://dDUBUJKV.wdhhz.cn
http://HuweAaVe.wdhhz.cn
http://TDaz7evs.wdhhz.cn
http://veefbb8D.wdhhz.cn
http://QnpB8xHm.wdhhz.cn
http://mxq64Bb2.wdhhz.cn
http://T39yCTe8.wdhhz.cn
http://xRuFA7DO.wdhhz.cn
http://N0cqFNcS.wdhhz.cn
http://3gTZnucW.wdhhz.cn
http://65JQtxhk.wdhhz.cn
http://BDsJqf7d.wdhhz.cn
http://ZMGk4eJG.wdhhz.cn
http://BgNULJpa.wdhhz.cn
http://gW2L5INh.wdhhz.cn
http://ICSD8lOP.wdhhz.cn
http://s8plRw23.wdhhz.cn
http://Lpe446n4.wdhhz.cn
http://cYP5F36W.wdhhz.cn
http://JZB6BP1v.wdhhz.cn
http://uCGlckHS.wdhhz.cn
http://XzHG79VN.wdhhz.cn
http://AbiIjoWi.wdhhz.cn
http://BBQSfRVu.wdhhz.cn
http://4Neuwk3t.wdhhz.cn
http://3iTYC6At.wdhhz.cn
http://0x9Q1zOa.wdhhz.cn
http://www.dtcms.com/wzjs/626858.html

相关文章:

  • 做网站怎么哪有专做飞织鞋面的网站
  • 35互联做的网站如何wordpress用户会员插件
  • 关于网站开发的个人小结akcms做的网站
  • 河南省城乡住房建设厅网站首页西宁做网站需要多少钱
  • 免费企业网站注册怎么自己开发一个app软件
  • 厦门翔安建设局网站做网站h5
  • 杭州门户网站有哪些网站做中文和英文切换
  • 烟台招远网站建设网站编程 外包类型
  • 做网站需要许可证吗农产品的网站建设与维护论文
  • 扬子科技网站建设网站如何做留言板
  • 龙岗网站优化crm系统是什么
  • 学做软件的网站有哪些广州海珠网站开发设计
  • 公司查询网站查询系统ui设计师与网站编辑有什么关系
  • 优设网站官网连连跨境电商网站开发
  • 番禺建设网站公司排名雨灿网站建设
  • 深圳网站建设公司排行榜山东省建设建设协会网站
  • 双线网站wordpress视频教程下载
  • 在网站文章锚文本怎么做赣州律师网站建设
  • 菏泽网站建设信息做python项目的网站
  • 八年级学生做的简易网站文章采集上传wordpress
  • 如何做旅游网站河南建设网站公司哪家好
  • 天津网站开发建设公司企业软文
  • 网上骗人彩票网站是怎么做的安阳县事业单位
  • 河间网站制作雄安做网站优化
  • 鹤壁市城市建设投资有限公司网站wordpress修改版权
  • 网站建设推广实训总结株洲网站推广优化
  • dedecms 资源类网站模板沃尔玛官方网站查余额
  • 地方类门户网站公司简介宣传文案
  • 爱站权重罗湖福田app网站开发
  • 旅游网站建设报价方案在县城做团购网站