我试图在一个庞大的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,但这并没有帮助。
我无法查看重复列错误的来源。这可能是数据库完整性问题吗?
任何帮助都非常感激。
答案 0 :(得分:12)
您的Profile
和FriendList
表格都有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.ID
或FriendList.ID
)或包含ID
。
答案 4 :(得分:0)
个人资料和朋友列表都有一个ID列。您要求调用整个连接“配置文件”,然后使用Profiles.ID,但SQL不知道您的意思是哪个ID。