一对多的两表联查出多条重复数据

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】5.7.25-TiDB-v6.1.5
【复现路径】两表联查出的问题
【遇到的问题:问题现象及影响】mysql上查的结果是3条,tidb上查询结果是42条
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
tidb的查询:
sql如下:
SELECT
t1.*,
t2.tag_status
FROM
t_new_inspect_item_config t1
LEFT JOIN t_new_inspect_config t2 ON t1.inspect_id = t2.id
AND t1.STATUS = 1
AND t1.is_deleted = 0
AND t2.STATUS = 1
AND t2.is_deleted = 0
WHERE
t1.tenant_id = ‘730000’
AND t1.inspect_id = ‘1372816766597782118’;

select * from t_new_inspect_config t where t.tenant_id =‘730000’ and t.id =‘1372816766597782118’;
select * from t_new_inspect_item_config where tenant_id =‘730000’ and inspect_id =‘1372816766597782118’;
查询结果如下:

mysql上同样的sql:

上sql

如果关联字段是字符串,检查是否忽略大小写,结果会不同

join字段是不是出现类型使用错误,把varchar用成int了

1 个赞

你这啥也没有就一句话,我们怎么分析 :joy: 起码发个sql语句 或者查询出的截图

等你上sql,最好把表结构和出错的数据也贴出来。

把SQL和两边的表数据贴出来看看,按理说默认情况下,tidb比mysql严格才对的。tidb对大小写和左右空格要求更高

有可能,我确认下

编辑问题的过程中断了

严格的话会报错或者一条不出来,这应该就是类型转换机制不合理

确实是这个问题,需要把数值做个转换

SELECT
t2.tag_status,t1.*
FROM
t_new_inspect_item_config t1
LEFT JOIN t_new_inspect_config t2 ON t1.inspect_id = CONCAT(‘’, t2.id)

转换为string类型就ok了

1 个赞
  • 如果你的问题已解决:

  • 如果你自己排查解决了,请附上你的解决方案,对自己的方案标记【对我有用】。

  • 如果别人帮助你解决了问题,那么请选择【最有价值】的回复,标记为【对我有用】,对帮助你的人,也是一种嘉奖和赞赏。

    • 被标记了【对我有用】的问题,才能被搜索到,这样子也能帮助他人更高效地找到答案。标记了【对我有用】还能获得 5 积分,5 经验值。
  • 如果你的问题还没有解决,请继续追问及反馈你遇到的问题。

怎么标注对我有用,没找到这样的选项

对认为是解决方案的回复,点击这里即可 :handshake: :handshake: :handshake:

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。