MySQL多表查询报错1066:非唯一表/别名问题咨询
解决SQL关联同表的别名冲突问题
嘿,这个问题我太熟啦!你碰到的1066 Not unique table/alias: 'settings'错误,原因很简单——你两次关联了同一个settings表,但没给它们分别起别名,数据库根本分不清你说的是哪一个settings表呀!
为什么需要别名?
因为你要通过parameter表的两个不同外键(unit_id和source_id)关联settings表,分别获取对应的名称。这相当于在查询里同时使用了settings表的两个“副本”,必须给每个副本起不同的别名,数据库才能准确对应关联关系。
修正后的SQL语句
直接给两次关联的settings表加上不同的别名就行,比如第一次叫s_unit,第二次叫s_source(别名可以随便取,只要清晰好记就行):
SELECT `parameter`.*, `s_unit`.`name` AS `unitname`, `s_source`.`name` AS `sourcename` FROM `parameter` INNER JOIN `settings` s_unit ON `parameter`.`unit_id` = `s_unit`.`id` INNER JOIN `settings` s_source ON `parameter`.`source_id` = `s_source`.`id` WHERE `parameter`.`isdeleted` = 0 ORDER BY `parameter`.`id` DESC
补充说明
你担心用关联表小题大做?其实完全不会!这种通过两次关联同表来获取不同外键对应数据的场景,是最直接清晰的解决方案,逻辑一目了然,后续维护也方便,完全没必要纠结~
内容的提问来源于stack exchange,提问作者Kames P
相关产品推荐
相关产品推荐

