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

mysql多表重复数据只保留一行的思路

一、问题描述

假设有3个表,test_atest_btest_c

test_atest_b中有些重复数据;

现在要把这2个表的数据同步到表c,但是重复数据只保留1行。

样例如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
具体要求如下:
1.test_atest_b中都存在的数据(根据card关联),以test_a为准,并且把authority字段拼起来(逗号分隔),移动到test_c

2.对于test_a不存在但是test_b存在的数据,以test_b为准,移动到test_c

3.对于test_a存在但是test_b不存在的数据,以test_a为准,移动到test_c

二、sql样例

1.首先查询到test_a不存在但是test_b存在的数据:

SELECT
	NULL AS user_id,
	b.card,
	b. NAME,
	b.authority
FROM
	test_b b
LEFT JOIN test_a a ON b.card = a.card
WHERE
	a.id IS NULL

使用a.id is null,就说明是test_b存在、test_a不存在了;
然后可以把这部分数据存入test_c

2.然后查询test_a 存在 && ( test_b 存在 || test_b 不存在)的数据

SELECT
	a.user_id,
	a.card,
	ifnull(a.NAME, b.NAME),
	CASE
WHEN a.authority IS NULL
AND b.authority IS NULL THEN
	NULL
WHEN a.authority IS NOT NULL
AND b.authority IS NOT NULL THEN
	concat(
		a.authority,
		',',
		b.authority
	)
WHEN a.authority IS NOT NULL
AND b.authority IS NULL THEN
	a.authority
WHEN a.authority IS NULL
AND b.authority IS NOT NULL THEN
	b.authority
ELSE
	a.authority
END AS authority
FROM
	test_a a
LEFT JOIN test_b b ON a.card = b.card

使用了ifnull(a.NAME, b.NAME),,可以当test_a表的数据为空时(不准确了),使用test_b表的数据;

注意这里有个坑,使用concat(a.authority,',',b.authority)时,如果有一个表的数据为null,那么最终结果就会是null,不符合预期;

//这样有些问题
//select a.user_id,a.card,a.name,a.authority,b.authority,concat(a.authority,',',b.authority) from test_a a left join test_b b on a.card=b.card 

在这里插入图片描述

并且还需要判断是否需要拼接,

因此sql中使用了case when写法。

相关文章:

  • OpenCV简介及安装
  • java多线程CountDownLatch简单测试
  • lodash常见的方法
  • Centos7安装docker、java、python环境
  • ubuntu/vscode下的c/c++开发之-CMake语法与练习
  • 网狐类源码游戏配置数据库数据(一键配置网狐数据库)
  • Kubernetes v1.28.4 安装笔记
  • Linux常用命令----history命令
  • Find My键盘|苹果Find My技术与键盘结合,智能防丢,全球定位
  • Git常用命令#更改用户名
  • web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)
  • C语言——猜凶手
  • Kotlin学习——kt中的类,数据类 枚举类 密封类,以及对象
  • Element-UI Upload 手动上传文件的实现与优化
  • Vue中mvvm的作用
  • 【上海大学数字逻辑实验报告】一、基本门电路
  • Node——Node.js简介
  • Flutter应用程序加固的问题及解决方案
  • 【心得】XXE漏洞利用个人笔记
  • Python与GPU编程快速入门(五)
  • 学校网站建设协议模板/上海seo优化
  • 网站建设潍坊/深圳网络营销公司
  • 如何设计产品网站建设/seosem顾问
  • 北京 网站建设公司/专业的网页制作公司
  • 直播间网站开发设计/2022国内外重大新闻事件10条
  • 湖南网页设计培训网站建设/成都关键词排名推广