不是唯一的表/别名

Posted

技术标签:

【中文标题】不是唯一的表/别名【英文标题】:Not unique table/alias 【发布时间】:2011-11-10 18:37:07 【问题描述】:

我收到错误ERROR 1066 (42000): Not unique table/alias:

我不知道它有什么问题。

SELECT Project_Assigned.ProjectID, Project_Title, Account.Account_ID, Username, Access_Type
FROM Project_Assigned 
JOIN Account 
  ON Project_Assigned.AccountID = Account.Account_ID
JOIN Project
  ON Project_Assigned.ProjectID = Project.Project_ID
where Access_Type = 'Client';

【问题讨论】:

您应该发布表架构。您在没有参考他们的表的情况下投入了许多列,如果这些列是唯一的,这没关系。但是,我建议您开始为表名起别名,并在加入时始终在列前加上表别名。这听起来可能很幼稚,但您确定这是产生该错误的查询吗?您是否尝试过直接在 mysql 控制台或 phpMyAdmin 中运行查询? 我总是通过 mysql 控制台在终端中执行 mysql 查询,我已经尝试修复它足够多的时间来知道这是它执行的错误。 【参考方案1】:

您的查询包含的列可能在您引用的多个表中以相同的名称出现,因此出现非唯一错误。最好在加入时明确引用和/或使用表别名。

试试

    SELECT pa.ProjectID, p.Project_Title, a.Account_ID, a.Username, a.Access_Type, c.First_Name, c.Last_Name
      FROM Project_Assigned pa
INNER JOIN Account a
        ON pa.AccountID = a.Account_ID
INNER JOIN Project p
        ON pa.ProjectID = p.Project_ID
INNER JOIN Clients c
        ON a.Account_ID = c.Account_ID
     WHERE a.Access_Type = 'Client';

【讨论】:

@Shef - 你有更多关于为什么在这个查询中需要表别名的信息吗?我无法使用 MySQL 5.0 在此处重现错误消息:-? 注意事项。显然我正在使用 MySQL 5.5.9 在上面的查询之上,我如何从具有相同 Account_ID 的单独客户表中获取客户名字和姓氏? 嗨 Álvaro 可能是因为两个连接 - JOIN Account ON Project_Assigned.AccountID = Account.Account_ID JOIN Project ON Project_Assigned.ProjectID = Project.Project_ID 与它们,编译器不知道哪些表被引用,因为像“ProjectID”这样的字段不是唯一的 - 它们可能来自任何一个表,所以编译器可能会抱怨而不是猜测......除非你使用别名:) 经验法则,在加入时使用别名并在引用中明确。 投了反对票!为了帮助其他人学习,请始终添加评论并解释您的解决方案为何有效。【参考方案2】:
 select persons.personsid,name,info.id,address
    -> from persons
    -> inner join persons on info.infoid = info.info.id;

【讨论】:

请查看how to answer 并更新您的答案以提供更多详细信息。具体来说,如果您解释一下这是如何解决问题的,将会很有帮助

以上是关于不是唯一的表/别名的主要内容,如果未能解决你的问题,请参考以下文章

不是唯一的表/别名

错误代码:1066。不是唯一的表/别名:'circle_call_prefixes'

不是唯一的表/别名:'movie_direction' [关闭]

发生数据库错误错误号:1066 不是唯一的表/别名:[重复]

错误代码:1066。不是唯一的表/别名:'ordertbl' - 无法执行内部连接 ​​MYSQL

为啥错误 #1066 - 不是唯一的表/别名:'cat_rapoarte'