Mysql的函数GROUP_CONCAT和FIND_IN_SET

news2025/7/25 10:11:37

业务场景:
表A:存在 customer_phone;bac_id主键
表B:存在 主键id;bac_id字段

customer_phone:用户手机号;
bac_id:主键
表A :每个手机号可能会对应多个主键;要查询每个客户手机号包含哪些主键信息。

这样时候我们就可以用 GROUP_CONCAT

GROUP_CONCAT:获取分组字段包含的某个字段信息,返回的是逗号拼接的字符串,
同时也能对里面的字段进行排序。效果如下

在这里插入图片描述

业务场景二:
先根据场景一活得的结果;表A 要做到一个手机号对应一个主键的效果(该手机号对应的其余主键删除);同时更新表B的bac_id字段;(和表A保持同步)。

这个时候不能先删除表A重复的手机号;要先更新表B的信息

这个时候我们就可以利用FIND_IN_SET;
FIND_IN_SET(str,strlist) ;判断str是否存在strlist;存在则返回对应的记录;不存在返回空记录
拿手机号77778为例;包含43,74,603三个主键
那么我们就可以以上图的结果集和主键信息做关联,从而做更新处理

 update 表B  km
 inner join
( SELECT B.id ,B.bc_id,A.stbid,A.bac_id
 FROM

 (
  select customer_phone, count(1) ,GROUP_CONCAT(bac_id order by bac_id asc) stbid,min(bac_id) bac_id
  from 表A
  group by customer_phone  having(count(1)>1)
 ) A

JOIN   表B     B
ON FIND_IN_SET(B.bc_id,A.stbid) ) ks
on km.id=ks.id
set km.bc_id=ks.bac_id

删除同一个手机号多余的记录信息(保留创建时间最早的记录)

DELETE FROM   表A    WHERE bac_id NOT IN (
  SELECT t.min_id FROM (
    SELECT MIN(bac_id) AS min_id FROM   表A     GROUP BY customer_phone
  ) t
)

今天的分享就到此结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我该怎么选择IB课程?

IB用6大学科组及3大课程核心构建知识体系,涵盖广博、注重知行合一,对学生的综合素质的提升以及综合竞争力的打造都十分有益。IB选课建议 六大学科组中的每个课程分为HL(高难度)和SL(标准水平) HLIB课程&…

「RISC-V Arch」SBI 规范解读(上)

术语 SBI,Supervisor Binary Interface,管理二进制接口 U-Mode,User mode,用户模式 S-Mode,Supervisor mode,监督模式 VS-Mode,Virtualization Supervisor mode,虚拟机监督模式 …

三菱FX3U与威纶MT8071IP走RS422通讯

一、准备工作 1.需要工具: 电脑一台、PLC:三菱FX3U一个、触摸屏:威纶MT8071一个、 (三菱圆形编程口转USB)一根、触摸屏与电脑通讯线一根(T型口数据线)、PLC与触摸屏通讯线:电烙…

谷歌搜索留痕的技术公式【2023年新版】

本文主要分享谷歌搜索留痕的技术公式,让你更简单的去学习谷歌留痕的技术原理 本文由光算创作,有可能会被修改和剽窃,我们佛系对待这样的行为吧。 谷歌搜索留痕的技术公式是什么? 答案是:需要做排名的关键词海量能搜…

Apache Hadoop生态部署-hadoop单机安装

目录 查看服务架构图-服务分布、版本信息 1:安装包下载 2:配置环境变量 3:服务配置 (1)core-site.xml (2)配置 hadoop-env.sh (3)HDFS 配置文件hdfs-site.xml &a…

【Redis】数据库和缓存如何保证一致性?

【Redis】数据库和缓存如何保证一致性? 文章目录【Redis】数据库和缓存如何保证一致性?常见方案先更新缓存,再更新数据库先更新数据库,再更新缓存并发情况下的思考先删除缓存,再更新数据库先更新数据库,再删…

StopWatch计时器

前言 开发中,为了评估性能,我们通常会使用System.currentTimeMillis() 去计算程序运行耗时 long startTimeSystem.currentTimeMillis();//业务代码... long endTimeSystem.currentTimeMillis(); System.out.println("耗时:" (endTime-startT…

Java多线程(三)---synchronized、Lock和volatile

Java内存模型(非JVM)Java内存模型(Java Memory Model简称JMM),是一种共享内存模型,是多线程的东西,并不是JVM(Java Virtual Machine(Java虚拟机)的缩写),这是俩玩意儿!&a…

Ubuntu 22.04.2 发布,可更新至 Linux Kernel 5.19

Ubuntu 22.04 LTS (Jammy Jellyfish) Ubuntu 22.04.2 发布,可更新至 Linux Kernel 5.19 请访问原文链接:Ubuntu 22.04 LTS (Jammy Jellyfish),查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 发行说…

ssh远程登录报错:kex_exchange_identification: Connection closed by remote host

基本信息系统:MacOS Catalina 10.15.7报错信息:终端登录远程服务器时报错:kex_exchange_identification: Connection closed by remote host复制然而服务商的一键登录或VNC登录正常。解决方案首先使用以下命令debug登录过程,以便定…

这可能是Spring Boot Starter 讲的最清楚的一次了

前面我们简单介绍了如何使用消息中间件Apache Pulsar,但是在项目中那样使用,显然是不太好的,不管从易用性和扩展性来看,都是远远不够, 为了和springboot项目集成,写一个pulsar-spring-boot-starter是非常有…

Linux核心技能:2023主流监控Prometheus详解,附官方可复制中文文档教程

Prometheus既是一个时序数据库,又是一个监控系统,更是一套完备的监控生态解决方案。作为时序数据库,目前Prometheus已超越了老牌的时序数据库OpenTSDB、Graphite、RRDtool、KairosDB等,如图所示。 (来源网络&#xff0…

QT+OpenGL鼠标操作和模型控制

文章目录QTOpenGL鼠标操作和模型控制鼠标拾取理论有点小复杂从鼠标计算射线第 0 步:2D 视口坐标第 1 步:3d归一化设备坐标第 2 步:4d齐次剪辑坐标第 3 步:4d眼(相机)坐标第 4 步:4d 世界坐标代码展示模型控制多模型加载…

自动执行自动化测试用例

phpunit 接口自动化测试系列 所有自动化测试用例最终的目的都是一样的,实现无人值守的自动化运行。而目前最常用的就是Jenkins来实现这个功能,在前面的WebdriverPython页面自动化的教程中我们已经详细讲解了如何将自动化测试用例接入到Jenkins中。本章我…

RK系列(RK3568) i2s 音频输入 麦克风驱动

平台:Android12SOC:RK3568外围芯片:XS9922i2s简介:从上图看I2s主要的线有:SDO SCLK LRCK MCLK I2S协议只定义三根信号线:串行时钟信号SCLK(BCLK)、数据信号SD和左右声道选择信号WS。(1&#xff…

QT入门Containers之QStackedWidget

目录 一、QStackedWidget界面相关 1、布局介绍 2、插入界面 3、插入类界面 二、Demo展示 此文为作者原创,创作不易,转载请标明出处! 一、QStackedWidget界面相关 1、布局介绍 QStackedWidget这个控件在界面布局时,使用还…

JVM整体分析篇

这里写目录标题JVM的组成部分1.类装载子系统1.1一个类加载到JVM的过程1.2类加载机制1.3为什么设计双亲委派机制1.4怎么打破双亲委派机制2.运行时数据区2.1线程私有及共享2.2JVM内存区结构2.3JVM参数设置经验3.Java对象的生命周期3.1.对象的创建3.2.对象大小的计算(6…

六、程序计数器(PC寄存器)

JVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其…

Python中实现将内容进行base64编码与解码

一、需求说明需要使用Python实现将内容转为base64编码,解码,方便后续的数据操作。二、base64简介Base64是一种二进制到文本的编码方式【是一种基于 64 个可打印字符来表示二进制数据的表示方法(由于 2^664,所以每 6 个比特为一个单…

PHP/7.2.11 缺少 apache2/logs/httpd.pid 文件

启动服务时:systemctl restart httpd.service,报错:● httpd.service - httpd serviceLoaded: loaded (/etc/systemd/system/httpd.service; enabled; vendor preset: disabled)Active: failed (Result: exit-code) since 五 2023-02-24 16:1…