问题描述

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


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

t_act_business:
在这里插入图片描述
t_fault:
在这里插入图片描述

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`

在这里插入图片描述

原因分析:

表一: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.统一字段类型

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐