mysql -- 左连接一对多只取一条,去重重复字段

这篇具有很好参考价值的文章主要介绍了mysql -- 左连接一对多只取一条,去重重复字段。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

        例如,给你一张用户表,还有一张地区信息表(每条数据都是到省 - 市 - 县 的地区信息,具体到县区),用户表中有用户所在市区字段,你要根据 地区信息表 查用户的所在市区的市区编码。就会出现一个情况,用户表 左连接 地区信息表  根据市区信息去匹配,一对多(比如惠州有7的县区),这个时候你只要随机的一条就够不需要多条,现在就考虑如何去重

sql大概如下:

        select  用户表id, 用户字段,市区编码   

        from 用户表

        left join 地区信息表  on  用户市区 = 地区表市区

尝试一:

        使用 DISTINCT

修改sql:

        select  DISTINCT 用户表id, 用户字段,市区编码   

        from 用户表

        left join 地区信息表  on  用户市区 = 地区表市区

结果:

        没用,原因是 mysql的DISTINCT关键字,是后面跟多少个字段,就是多少个字段一起组合,组合后所有字段一样才会去重, 并不是说你在id前面,就会对id字段一样的数据去重(老实说个人觉得这个关键字很鸡肋,查询的所有字段完全一样才去重,基本就是相当于表中有两条一模一样的数据,一般都不可能),由于市区编码不同县区不一样,所以这个关键字根本去不了重

尝试二:

        使用分组 group by

修改sql:

        select  用户表id, 用户字段,市区编码   

        from 用户表

        left join 地区信息表  on  用户市区 = 地区表市区

        group by 用户表id

结果:

        可以实现,因为根据分组后,多条数据的用户id是相同的,分到同一组,所以查询就剩下一条了,这样你取到的市区编码就是随机的一条

        但是,银行mysql后面的版本有个ONLY_FULL_GROUP_BY 这个设置,大概的意思就是,你如果使用group by,那么你的select 的字段必须是group by中的分组字段,或者其他的使用了聚合函数的字段。所以 (select  用户表id, 用户字段,市区编码   ) 是会报错的,只能用 (select  用户表id),或者根据三个字段一起分组(group by  用户表id, 用户字段,市区编码   ),但是又相当于没分组了,而且正常的项目查询的字段何止三个,肯定不能都分组,效率很低,所以也不行,除非你关了上面这个ONLY_FULL_GROUP_BY ,或者使用低版本mysql

尝试三:

        这次是使用子查询的方法,在子查询中使用group by,让子查询里变成一个市区一条数据而不是原来的一个县区一个数据

修改sql:

        select  用户表id, 用户字段,市区编码   

        from 用户表

        left join 

                (select 地区表市区 ,max(市区编码) 

                from 地区信息表

                group by 地区表市区

                ) as d 

                on  用户市区 = d.地区表市区

结果:

        成功,在子查询中,用分组已经得到一个市区一条数据,然后用max聚合函数查到最大的市区编码(相当于随机获取其中一条),这样子查询和用户表的数据就是一对一,就可以实现我们的需要

结语:

        上送需求是我根据我实际工作遇到的举例出来的,相信也有不少朋友遇到相同的,上述仅代表我个人的处理过程和意见,如果朋友们有其他更好的方法也请不吝赐教,谢谢文章来源地址https://www.toymoban.com/news/detail-599673.html

到了这里,关于mysql -- 左连接一对多只取一条,去重重复字段的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql 删除重复数据保留一条有效数据

    ============================== ©Copyright 蕃薯耀 2023-01-31 蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主 原理: 根据字段对数据进行分组,查询出所有分组的最小ID(即要保留的不重复数据) 将查询出来的数据(所有不重复的数据)存放到临时表中 从原来的表中删除ID不在临时表

    2024年02月16日
    浏览(50)
  • mysql表中删除重复记录,只保留一条记录的操作

    mysql表中两个字段重复记录,只保留一条记录的操作 例如有一张学生表 其中name 和 class 相同的视为重复记录,需要保留一条记录,删除重复记录, 两种操作方式如下: 方法一: group by 查询结果如下: 此操作找出了需要保留的记录,即按name、class进行分组,取出id最小的记录

    2024年02月09日
    浏览(54)
  • 解决MySQL中分页查询时多页有重复数据,实际只有一条数据的问题

    有一个离奇的BUG,在查询时,第一页跟第二页有一个共同的数据。有的数据却不显示。 后来发现是在SQL排序时没用主键排序。 解决:使用主键排序 以下是我准备的举例,可以自己试试。 分页查询公式:分页查询–他的公式为(伪代码): [NOT] LIMIT (curPage-1)*pageSize,pageSize 执行

    2024年02月16日
    浏览(37)
  • java 集合去重、获取、统计重复元素

    开发过程中常遇见的三种问题:集合去重、获取重复元素、统计重复次数。 网上搜了下,实现过程五花八门,这里简单汇总下我觉得比较常用的方式: 方法:List转set;一行代码即可; 前提是不需要获取重复元素和统计重复次数 ,最简单的就是把List转为Set,众所周知,set的

    2024年02月16日
    浏览(53)
  • SQL Server删除重复数据只保留一条

    介绍 最近在导入数据库数据, 有时候给的数据源文件,存在重复数据, 需要清除但是还需要保留一条记录的需求. 本文将介绍如何使用SQL Server来实现这个需求。 流程 下面是实现删除重复数据的流程,我们可以用表格展示每个步骤: 步骤    描述 步骤一    先看看有哪些重复

    2024年02月01日
    浏览(40)
  • 十行python代码实现文件去重,去除重复文件的脚本

    path1/path2:待比较的两个文件路径。 shallow :默认为True,即只比较os.stat()获取的元数据(创建时间,大小等信息)是否相同, 设置为False的话,在对比文件的时候还要比较文件内容。

    2024年02月02日
    浏览(39)
  • java list 快速去重 有序 重复 LinkedHashSet HashSet

     如果list中装的是简单元素,int 类型,string类型,想要去重,并且保持在list中的顺序,最快的方式如下: 使用 LinkedHashSet,去重加有序。 使用 HashSet,只去重,但顺序任意。 参考 Java中List集合对象去重及按属性去重的8种方法_java list对象去重_//承续缘_纪录片的博客-CSDN博客

    2024年02月13日
    浏览(45)
  • SQL语句删除重复记录且只保留一条有效记录

    1. 查找表中多余的重复记录,重复记录是根据单个字段(name)来判断 2. 删除表中多余的重复记录,重复记录是根据单个字段(id)来判断,只留有id最小的记录 3. 删除表中多余的重复记录(多个字段),只留有id最小的记录 参考:https://blog.csdn.net/JineD/article/details/126875291

    2024年02月13日
    浏览(58)
  • chatgpt赋能python:Python去重-如何高效地处理重复数据

    在数据处理过程中,重复数据可能会导致很多问题,如降低计算效率、影响数据质量等。因此,数据去重是一个非常重要的任务,特别是在大数据处理中更是如此。Python作为一种流行的编程语言,提供了许多方法和工具来去重数据。在本文中,我们将介绍一些常见的Python去重

    2024年02月07日
    浏览(47)
  • Js:获取数组对象重复属性值和数组对象去重

    对象数组去重分为两类:根据某一属性去重,和去重完全相同对象(属性属性值都相同) 一.数组嵌套对象,根据对象某一属性去重 二、数组嵌套对象,去重完全相同对象(属性属性值都相同) 整理如下: 首先、循环数组,拿到对象的所有属性组成的数组; 其次、循环属性

    2024年01月21日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包