SQL重复列名称错误

时间:2012-02-13 12:59:11

标签: sql

我试图在一个庞大的SQL语句中找到一个错误(不是我的) - 我已经削减了很多它以使其可读 - 即使削减它仍然会引发错误

SELECT DISTINCT Profiles.ID 
FROM 
   (select * from Profiles RIGHT JOIN FriendList ON (FriendList.Profile = 15237) 
    order by LastLoggedIn DESC ) as Profiles

这会返回错误

  

重复列名称' ID'

我测试了最后一部分(select * from Profiles ... order by LastLoggedIn DESC),它本身可以正常工作

我尝试通过更改DISTINCT部分中的列名来解决问题,但没有任何运气。

我读到的一个解决方案是删除DISTINCT,但这并没有帮助。

我无法查看重复列错误的来源。这可能是数据库完整性问题吗?

任何帮助都非常感激。

5 个答案:

答案 0 :(得分:12)

您的ProfileFriendList表格都有ID列。因为你说select *,你在子选择中得到两列名为ID的列,其别名为Profiles,而SQL不知道哪一列Profiles.ID引用to(注意Profiles这里指的是子查询的别名,而不是同名的表。)

由于您只需要ID列,因此可以将其更改为:

SELECT DISTINCT Profiles.ID FROM 
( select Profiles.ID from Profiles RIGHT JOIN FriendList ON (FriendList.Profile = 15237) 
order by LastLoggedIn DESC ) as Profiles

答案 1 :(得分:1)

将“select *”替换为“select col1,col2 ...”,错误应该变得明显(即多个列名为“ID”)。与独特或数据库完整性无关。

答案 2 :(得分:0)

你有一个名为“个人档案”的表,你正在"创建"你的From中有一个名为Profiles的临时表,我猜这是导致问题的原因。打电话给你的临时香蕉,试试SELECT DISTINCT bananas.ID FROM,看看是否有效

答案 3 :(得分:0)

如错误所示,您加入的每个表都有一个名为ID的列。您必须在加入条件中指定所需的ID列(Profiles.IDFriendList.ID)或包含ID

答案 4 :(得分:0)

个人资料和朋友列表都有一个ID列。您要求调用整个连接“配置文件”,然后使用Profiles.ID,但SQL不知道您的意思是哪个ID。