SQL通过公共ID列连接三表创建视图报重复列错误解决方法
错误原因
你的语句存在两个直接导致执行失败的问题:
- 视图名使用了全角弯引号
‘’,这不是SQL支持的合法标识符符号,解析器读到这个非法符号后会出现语法解析错位,这也是最初提示from airline a行出错的原因——报错提示的位置和实际触发错误的位置出现了错位。 - SELECT子句中重复返回了三次
airline_id列,分别来自airline、maintenance、flight三张表。三张表通过airline_id做等值关联,匹配到的行里该列的值完全一致,而视图不允许存在重名列,因此触发duplicate column id报错。
修正方案
因为关联逻辑已经保证三张表的airline_id完全匹配,只需要保留其中一个表的airline_id即可,同时把视图名的非法引号替换为对应数据库支持的标识符包裹符(MySQL用反引号,标准SQL用双引号,也可以直接省略引号),修正后的语句如下:
Create view `Runway_crew` as Select a.airline_id, a.craft_model, m.engine_check, m.fuel_check, m.flight_controls, m.windows_and_doors, m.head_mechanic, m.head_engineer, m.craft_status, f.departure_datetime, f.runway From airline a Join flight f On f.airline_id = a.airline_id Left join maintenance m On a.airline_id = m.airline_id;
补充说明
如果有特殊业务需求需要保留三个来源的airline_id做溯源,必须给重复列设置不同别名避免重名,示例写法:
Select a.airline_id as base_airline_id, m.airline_id as maintenance_match_id, f.airline_id as flight_match_id, -- 其余业务列保持不变
日常写SQL时注意所有符号都使用半角英文格式,避免全角符号导致的解析错位问题。
内容的提问来源于stack exchange,提问作者Abi f
相关产品推荐
相关产品推荐

