侧边栏壁纸
  • 累计撰写 56 篇文章
  • 累计创建 59 个标签
  • 累计收到 7 条评论

MySql-left join 重复数据问题(前提:表关系为一对一)

时间这孩子很诚实
2022-11-23 / 0 评论 / 0 点赞 / 47 阅读 / 357 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-11-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题描述

1.数据库中存在一对一关系的两张表通过LEFT JOIN 关联出重复数据

表一与表二关联字段 t_fault.id = t_act_business.table_id

表一:
CREATE TABLE `t_fault` (
  `id` varchar(255) NOT NULL,
  `create_by` varchar(255) DEFAULT NULL,
  `create_time` datetime(6) DEFAULT NULL,
  `del_flag` int(11) DEFAULT 0,
  `update_by` varchar(255) DEFAULT NULL,
  `update_time` datetime(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

表二:
CREATE TABLE `t_act_business` (
  `id` bigint(20) unsigned NOT NULL,
  `create_by` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `del_flag` tinyint(1) DEFAULT NULL,
  `update_by` varchar(255) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `table_id` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

值"1517427177589706753"在两张表中都仅有一条数据

t_act_business:
image-1669173600762
t_fault:
image-1669173624592

3.执行以下SQL出现重复

SELECT
t_act_business.`create_time`,
t_act_business.`table_id`,
t_fault.id
FROM
`t_act_business`
LEFT JOIN `t_fault` ON t_act_business.`table_id` = t_fault.`id`

image-1669173668070

原因分析:

表一:t_fault id类型为varchar
表二:t_act_business table_id类型为 bigint

两张表关联字段类型不同

解决方案:

1.通过自然连接处理

SELECT
t_act_business.`create_time`,
t_act_business.`table_id`,
t_fault.id
FROM
`t_act_business`,`t_fault` 
WHERE t_act_business.`table_id` = t_fault.`id`

2.统一字段类型和长度

0

评论区