我试图在一个庞大的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,但这没有帮助。
我只是看不到重复列错误的来源。这可能是数据库完整性问题吗?
任何帮助非常感谢。
你的 Profile
和 FriendList
桌子都有 ID
柱。因为你说 select *
,你得到两列名为 ID
在别名的子选择中 Profiles
,SQL并不知道哪一个 Profiles.ID
是指(注意到 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
将“select *”替换为“select col1,col2 ...”,错误应该变得明显(即多个列名为“ID”)。与独特或数据库完整性无关。
你有一个名为Profiles的表,你在From中“创建”一个名为Profiles的临时表,这将是我猜测是什么导致了这个问题。打电话给你的临时香蕉,试试吧 SELECT DISTINCT bananas.ID FROM
看看是否有效
如错误所示,您加入的每个表都有一个名为的列 ID
。你必须指定哪个 ID
你想要的专栏(Profiles.ID
要么 FriendList.ID
)或包括 ID
在连接条件下。
个人资料和朋友列表都有一个ID列。您要求调用整个连接“配置文件”,然后使用Profiles.ID,但SQL不知道您的意思是哪个ID。