mysql避免笛卡尔积_MYSQL:在自加入时避免重复记录的笛卡尔积
有两个表:表A和表B.它们具有相同的列,数据几乎相同.它们都具有自动递增的ID,两者之间的唯一区别是它们对于相同的记录具有不同的ID.
在这些列中,有一个IDENTIFIER列,它不是唯一的,即两个表中都有(非常少)具有相同IDENTIFIER的记录.
现在,为了找到表A的ID和表B的ID之间的对应关系,我必须在IDENTIFIER列上加入这两个表(为了所有目的,它是一个自连接),类似于:
SELECT A.ID, B.ID
FROM A INNER JOIN B ON A.IDENTIFIER = B.IDENTIFIER
但是,由于IDENTIFIER非唯一,这会生成IDENTIFIER的重复值的所有可能组合,我不希望这样.
理想情况下,我希望根据订单生成具有重复IDENTIFIER值的ID之间的一对一关联.例如,假设表A中有六个具有不同ID和相同IDENTIFIER值的记录(因此在表B中):
A B
IDENTIFIER:'ident105', ID:10 -> IDENTIFIER:'ident105', ID:3
IDENTIFIER:'ident105', ID:20 -> IDENTIFIER:'ident105', ID:400
IDENTIFIER:'ident105', ID:23 -> IDENTIFIER:'ident105', ID:420
IDENTIFIER:'ident105', ID:100 -> IDENTIFIER:'ident105', ID:512
IDENTIFIER:'ident105', ID:120 -> IDENTIFIER:'ident105', ID:513
IDENTIFIER:'ident105', ID:300 -> IDENTIFIER:'ident105', ID:798
那将是理想的.
无论如何,无论ID的顺序如何,生成一对一关联的方法仍然可以(但不是首选).
谢谢你的时间,
西尔维奥
最佳答案
select a_numbered.id, a_numbered.identifier, b_numbered.id from
(
select a.*,
case
when @identifier = a.identifier then @rownum := @rownum + 1
else @rownum := 1
end as rn,
@identifier := a.identifier
from a
join (select @rownum := 0, @identifier := null) r
order by a.identifier
) a_numbered join (
select b.*,
case
when @identifier = b.identifier then @rownum := @rownum + 1
else @rownum := 1
end as rn,
@identifier := b.identifier
from b
join (select @rownum := 0, @identifier := null) r
order by b.identifier
) b_numbered
on a_numbered.rn=b_numbered.rn and a_numbered.identifier=b_numbered.identifier
mysql避免笛卡尔积_MYSQL:在自加入时避免重复记录的笛卡尔积相关推荐
- mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论_MySQL...
在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...
- mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论
在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...
- mysql插入性能_mysql 数据量大时插入和查询性能
现在mysql中有数据33.8w的数据,然后做查询和更新或插入操作,速度很慢,基本100条数据就要1.68s.好慢啊,我要测试一下,到底慢在哪?能不能提高点速度? 参考一篇博文:http://blog ...
- mysql分隔符声明_MySQL分隔符发生错误时?
当您使用带有分号(;)的管道定界符(|)并使用低于8.0.12的MySQL版本时,会出现MySQL定界符. MySQL将管道(|)视为一个定界符,分号(;)是另一个定界符.因此,请勿将MySQL分隔符 ...
- mysql null处理_MySQL中处理Null时要注意两大陷阱
MySQL数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...
- mysql limit分页_MySQL order by limit 分页数据重复问题
黑客技术点击右侧关注,了解黑客的世界! Linux编程点击右侧关注,免费入门到精通! 程序员严选甄选正品好物,程序员生活指南! 作者丨猿码道 https://www.jianshu.com/p/544 ...
- 如何提高mysql插入速度_mysql技巧:提高插入数据(添加记录)的速度
问题描述: 普通台式机,采集数据,表中已经有1000万数据量. 采集回来的数据插入表中的时候很慢,每条约100毫秒. 解决方法: 1.加大mysql配置中的bulk_insert_buffer_siz ...
- MySQL表上亿级数据量实现删除重复记录
上周从数据采集部门拿到一批400份的json文件,每个文件里30w+的json对象,对象里有uid,对重复的uid,需要去重下. 电脑配置4核8G 废话不多说,直接上干货. 1.创建表datatest ...
- mysql insert 运算_MySql insert插入操作的3个小技巧分享
1.插入的数据来源自其他表 表A有id, cola 字段 表B有id, cola, colb...等字段,其中id都为主键,cola为相同名字的列 现想将表B中colb>1000的记录都插入表A ...
最新文章
- SQL Server - select语句练习
- GIT:本地有更改,但强制作远程仓库里作更新
- cocos2dx3.8 android打包脚本编写
- Java 面向对象编程、jQuery、JavaScript、servlet、javabean----理论知识
- linux python代码编辑器,Linux上的Python编辑器
- 纪念第一个正式的java程序
- linux 查看其他磁盘分区,Linux 查看磁盘分区.pdf
- 智能解析php源码,PHP源码:XyPlayer在线影视v3.8二次智能解析源码
- Nginx服务器的压缩功能和缓存功能
- mysql 查询表注释
- 关于团队项目的一些思考和理解
- android开发 自我优势_Android程序员必看之Android六大优势
- 【深度学习模型】了解一下Faster RCNN
- Python —— 爬取成果微博相册图片 ——明星
- 做量化交易的第一步,Python爬取股票数据
- http常见状态码以及其代表的含义
- php能做动画吗,使用 PHP 快速生成 Flash 动画
- 【七七八八】疫情期间谈谈我的转变
- 基于angular.js的全年日历作物操作甘特图
- 《神经网络与深度学习》算法伪代码汇总