记录一次TIDB数据库表LEFT JOIN笛卡尔积问题

文章讨论了机构用户管理列表中的数据重复问题,源于不同环境(生产/测试)下TIDBMySQL版本的差异导致的数据类型转换问题。作者通过实验发现,数据类型一致性对于避免关联查询异常至关重要。
摘要由CSDN通过智能技术生成

1.机构用户管理列表数据重复问题

  • 环境:用户管理基础系统 (xhszjs.com)、用户管理基础系统 (xhszjs.cn)
  • 描述:客户和用户管理=》用户管理=》机构用户管理,机构用户列表数据重复的情况。
  • 如图所示:

生产环境:

测试环境:

2.排查及解决过程:

  • 问题sql:

  • 定位:

sub_org_user=》`cust_manager` varchar(32) DEFAULT NULL COMMENT '客户经理',与sub_org_contact=》`id` bigint(64) NOT NULL COMMENT '主键id 雪花算法产生',两表关联字段数据类型不一致,数据关联时包含有数据类型自动转换的过程,怀疑是类型转换后匹配异常导致的数据重复。

  • 尝试采用TIDB支持的MYSQL数据类型转换专用函数CAST(VALUE AS TYPE)进行数据转换后再关联,修改如下:

  • 在测试环境数据库中调试,执行情况符合预期,相同条件下未再出现关联数据重复问题;在开发环境数据库中,构建类似的数据,执行原有未经显示转换的问题sql,未能复现关联数据重复的问题,执行显示转换后的sql,关联数据也是正常的。怀疑数据库版本不一致导致的部分sql执行特性的差异造成的。经过查询,开发环境版本=》7.25-TiDB-v4.0.9,测试环境=》5.7.25-TiDB-v5.2.1,但暂未在文档中查询到有关本次执行细节差异的相关说明。
  • 建议,在可知的表关联字段数据类型的前提下,在定义表的关联字段数据类型的时候,请保持一致。避免在数据库不同版本间切换后,因隐形的数据类型自动转换细节的差异,导致关联查询出现异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mister-big

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值