不是唯一的表/别名
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 不是唯一的表/别名:[重复]