MySQL查询报错Not unique table/alias: 'departamentos',求技术协助
搞定MySQL的"Not unique table/alias: 'departamentos'"错误
嘿,这个错误其实很好解决——核心问题就是你在同一条查询里两次用到了departamentos表,但没给它们起不同的别名,MySQL懵了,分不清哪个是哪个,所以就抛出这个唯一性错误啦。
不过我瞅了眼你的查询语句,感觉还有个小笔误:你最后一次JOIN的表应该是funcionarios而不是重复的departamentos吧?毕竟你的SELECT里还查了funcionarios.nomeFuncionario,但原查询里根本没把员工表加进来关联啊。
修正后的正确查询(符合常规业务逻辑)
如果你的需求是“查询公司、对应部门以及部门里的员工”,那正确的写法应该是这样:
SELECT empresas.nome, departamentos.nomeDepartamento, funcionarios.nomeFuncionario FROM empresas INNER JOIN departamentos ON empresas.id = departamentos.idEmpresas INNER JOIN funcionarios ON departamentos.id = funcionarios.idDepartamentos;
这里departamentos只出现一次,不需要别名,自然就不会报错了,而且逻辑上也把三个表正确关联起来了。
要是你真的需要两次关联departamentos表
比如有些特殊场景,比如员工既有所属部门又有对接部门,需要两次查部门表,那必须给每个表实例起唯一的别名,举个例子:
SELECT empresas.nome, d1.nomeDepartamento AS 所属部门, d2.nomeDepartamento AS 对接部门, funcionarios.nomeFuncionario FROM empresas INNER JOIN departamentos d1 ON empresas.id = d1.idEmpresas INNER JOIN funcionarios ON d1.id = funcionarios.idDepartamentos INNER JOIN departamentos d2 ON funcionarios.id_departamento_docking = d2.id;
给两个departamentos分别起别名d1和d2,MySQL就能清楚区分它们,不会再闹脾气啦。
小提醒
- JOIN语句不用套那么多层括号,直接按顺序写可读性更高;
- 只要同一个表在查询里出现多次,一定要给每个实例加唯一别名,这是MySQL的规矩;
- 写完查询先扫一眼FROM里的表,确保关联条件都对应对了表或者别名,避免逻辑错误。
内容的提问来源于stack exchange,提问作者Raven
相关产品推荐
相关产品推荐

