有两个表:表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:在自加入时避免重复记录的笛卡尔积相关推荐

  1. mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论_MySQL...

    在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...

  2. mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论

    在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...

  3. mysql插入性能_mysql 数据量大时插入和查询性能

    现在mysql中有数据33.8w的数据,然后做查询和更新或插入操作,速度很慢,基本100条数据就要1.68s.好慢啊,我要测试一下,到底慢在哪?能不能提高点速度? 参考一篇博文:http://blog ...

  4. mysql分隔符声明_MySQL分隔符发生错误时?

    当您使用带有分号(;)的管道定界符(|)并使用低于8.0.12的MySQL版本时,会出现MySQL定界符. MySQL将管道(|)视为一个定界符,分号(;)是另一个定界符.因此,请勿将MySQL分隔符 ...

  5. mysql null处理_MySQL中处理Null时要注意两大陷阱

    MySQL数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...

  6. mysql limit分页_MySQL order by limit 分页数据重复问题

    黑客技术点击右侧关注,了解黑客的世界! Linux编程点击右侧关注,免费入门到精通! 程序员严选甄选正品好物,程序员生活指南! 作者丨猿码道 https://www.jianshu.com/p/544 ...

  7. 如何提高mysql插入速度_mysql技巧:提高插入数据(添加记录)的速度

    问题描述: 普通台式机,采集数据,表中已经有1000万数据量. 采集回来的数据插入表中的时候很慢,每条约100毫秒. 解决方法: 1.加大mysql配置中的bulk_insert_buffer_siz ...

  8. MySQL表上亿级数据量实现删除重复记录

    上周从数据采集部门拿到一批400份的json文件,每个文件里30w+的json对象,对象里有uid,对重复的uid,需要去重下. 电脑配置4核8G 废话不多说,直接上干货. 1.创建表datatest ...

  9. mysql insert 运算_MySql insert插入操作的3个小技巧分享

    1.插入的数据来源自其他表 表A有id, cola 字段 表B有id, cola, colb...等字段,其中id都为主键,cola为相同名字的列 现想将表B中colb>1000的记录都插入表A ...

最新文章

  1. SQL Server - select语句练习
  2. GIT:本地有更改,但强制作远程仓库里作更新
  3. cocos2dx3.8 android打包脚本编写
  4. Java 面向对象编程、jQuery、JavaScript、servlet、javabean----理论知识
  5. linux python代码编辑器,Linux上的Python编辑器
  6. 纪念第一个正式的java程序
  7. linux 查看其他磁盘分区,Linux 查看磁盘分区.pdf
  8. 智能解析php源码,PHP源码:XyPlayer在线影视v3.8二次智能解析源码
  9. Nginx服务器的压缩功能和缓存功能
  10. mysql 查询表注释
  11. 关于团队项目的一些思考和理解
  12. android开发 自我优势_Android程序员必看之Android六大优势
  13. 【深度学习模型】了解一下Faster RCNN
  14. Python —— 爬取成果微博相册图片 ——明星
  15. 做量化交易的第一步,Python爬取股票数据
  16. http常见状态码以及其代表的含义
  17. php能做动画吗,使用 PHP 快速生成 Flash 动画
  18. 【七七八八】疫情期间谈谈我的转变
  19. 基于angular.js的全年日历作物操作甘特图
  20. 《神经网络与深度学习》算法伪代码汇总

热门文章

  1. 家电产品出口指南,RoHs法规详解
  2. WinCE 访问服务器SqlServer
  3. 论文学习:Good practice for conducting and reporting MEG research
  4. 插件 桌面图标太多而影响观看壁纸 可用于 wallpaper
  5. 淘宝客户端高性能高稳定性施用框架的构架
  6. uni-app葵花宝典(欲练此功,必先自宫)
  7. [算法100天 day9]递归无尽搜和记忆搜索,动态规划Ⅲ
  8. 输出九九乘法表(C语言)
  9. 网课查题公众号题库搭建
  10. json实现表格列表的动态创建与绑定