MYSQL Duplicate column name ‘FId‘解决记录

前因:在优化sql的时候,在from里面嵌套子查询缩小结果集。

先写一下下面建表、连表查询的大概关系。

CREATE TABLE `table_a` (
	`FID` VARCHAR(32) NOT NULL COMMENT 'ID' COLLATE 'utf8_general_ci',
	`Fname` VARCHAR(8) NULL DEFAULT NULL COMMENT '名称' COLLATE 'utf8_general_ci',
	`Fphone` VARCHAR(20) NULL DEFAULT NULL COMMENT '电话' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`FID`) USING BTREE,
)
COMMENT='a'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `table_b` (
	`FID` VARCHAR(32) NOT NULL COMMENT 'ID' COLLATE 'utf8_general_ci',
	`Fproject` VARCHAR(8) NULL DEFAULT NULL COMMENT '名称' COLLATE 'utf8_general_ci',
	`FName` VARCHAR(20) NULL DEFAULT NULL COMMENT '电话' COLLATE 'utf8_general_ci',
	`Fseq` VARCHAR(20) NULL DEFAULT NULL COMMENT '电话' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`FID`) USING BTREE,
)
COMMENT='b'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `table_b` (
	`FID` VARCHAR(32) NOT NULL COMMENT 'ID' COLLATE 'utf8_general_ci',
	`Fname` VARCHAR(8) NULL DEFAULT NULL COMMENT '名称' COLLATE 'utf8_general_ci',
	`Ftable` VARCHAR(20) NULL DEFAULT NULL COMMENT '电话' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`FID`) USING BTREE,
)
COMMENT='b'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
select a.Fid,a.Fname,a.Fphone,b.Fname,b.Fproject,b.Fseq,c.Ftable,c.Fname
from table_a a
left join table_ b b on a.Fid = b.Fid 
left join table_c c on a.Fid = c.Fid
where 1=1

再写一个出问题的SQL

select a.Fid,a.Fname,a.Fphone,b.Fname,b.Fproject,b.Fseq,c.Ftable,c.Fname
from (
select * from table_a a
left join table_b b on a.Fid = b.Fid 
where b.Fproject = 'xxx'
) a
left join table_ b b on a.Fid = b.Fid 
left join table_c c on a.Fid = c.Fid
where 1=1

这里运行的时候就会出现报这个错:
Duplicate column name ‘FId’

这是为什么呢?
其实原因很简单,因为在子查询里面select *了,这里不但会返回table_a的字段,也会返回table_b的字段,这两个字段重复了,知道问题就好修改了,考虑到业务上返回其实只需要table_a的字段,所以将上面子查询select *from 修改成 select a.*from就可以了。

同时说一下添加子查询的优化思路:
在from里面嵌套子查询缩小结果集,在多张大表联表查询的时候这样优化sql,性能可以提升很多的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL重复列名错误是指在创建表或修改表结构时,列名重复。这通常是由于在表中定义了两个或多个具有相同名称的列。要解决这个问题,您需要修改表结构,删除重复的列名。您可以使用ALTER TABLE语句来修改表结构,或者使用phpMyAdmin等工具来删除重复的列名。 ### 回答2: MySQL是一种关系型数据库管理系统,它支持多个表在同一数据库中,以便在逻辑上组织数据。在进行表格设计时,各个字段的设置很重要,但在某些情况下,可能会出现“duplicate column name”的错误。这种情况通常是由于两个或更多的字段具有相同的名称,而导致的。 在MySQL中,每个字段都应该有唯一的名称,在同一表格中,不应该有两个或多个使用相同名称的字段。虽然可能存在使用相同名称的字段的情况(例如,当复制整个表格时),但在同一表格中使用相同名称的字段可能会导致导入或更新数据库的行为不稳定。 为了解决这个问题,需要确定哪些字段具有相同的名称,并修改其中一个或多个字段的名称。可以使用以下命令来找到具有重复名称的字段: ``` SHOW COLUMNS FROM table_name WHERE Field LIKE 'column_name'; ``` 这将列出一个或多个具有重复名称的字段。然后可以使用如下命令修改其中一个或多个字段的名称: ``` ALTER TABLE table_name CHANGE column_name new_column_name datatype(length); ``` 在将此命令应用于MySQL表格之前,必须先确定需要更改名称的那个字段的准确名称(例如,确定是“FirstName”而不是“First_Name”等)。在确认更改后,使用上述命令可以轻松地更改特定字段的名称,并消除“duplicate column name”错误。 ### 回答3: MySQL Duplicate Column Name错误是由于相同名称的列重复定义而引起的。这意味着在相同的表中定义了两个或更多的具有相同名称的列,MySQL不知道应该使用哪个列,并因此抛出错误。 该错误可以在多个地方出现,例如在创建表时定义要创建的列,或在更改现有表时添加、修改或删除列时。为了避免这个错误,您应该检查所有与表、列和变量有关的定义,并确保所有的名称都是唯一的。 解决方法: 1.重命名列名称 如果您发现表中有重复的列名称,最简单的解决方法是将其中一个或两个列的名称更改为唯一的名称。为了避免数据丢失,您应该使用ALTER TABLE命令来重命名列名称。 例如,假设您在mytable表中定义了两个相同名称的列: ALTER TABLE mytable CHANGE column1 unique_column1 INT(11); 在这里,您可以使用CHANGE子句来更改列名称。您需要指定要更改的列名称,新列名称和新列的数据类型。 2.使用别名 如果您不能更改列名称,您可以尝试使用别名,这将为您创建一个新的名称并指向重复列的相同数据。为此,您可以使用SELECT语句并为重复的列指定名称。 SELECT column1, column2, column3 AS unique_column3 FROM mytable; 在这里,您将使用AS子句为重复列指定新名称。这将为您创建别名列,并将重复列的相同数据集合在一起。 总之,避免MySQL Duplicate Column Name错误的最佳方法是在设计和创建数据库时选择唯一的列名称。如果您不小心定义了重复的列名称,您可以通过重命名或别名解决这个问题。但是,如果您在处理非常大的数据库时遇到这个错误,您可能需要耐心一些并手动解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值