问题 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,但这没有帮助。

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

任何帮助非常感谢。


11684
2018-02-13 12:59


起源

在配置文件表中是否有一个与另一个表的id列冲突的id列?您正在选择所有列,我建议减少选择的列数(更改*到列名称),看看是否可以解决您的问题。 - Robert
可能是这两个 Profiles 和 FriendList 在你内心的桌子 SELECT 有一个 ID 柱??所以你基本上会有两列,都叫做 ID  - 而你正在选择 一切 从那以后 JOIN  - 那么 ID 你指的是什么时候提到的 SELECT DISTINCT Profiles.ID ..... ?!?!? - marc_s
marc_s&Robert - 是的,这就是正在发生的事情。我猜到了这一点,但这超出了我对SQL的理解。问题是SQL语句是MASSIVE并且是动态构建的。对于这个问题,我把它剪成了骨头。我要把它扔给那个人,因为弄乱这个或者数据库的连锁效果太难以考虑了。 - Steve


答案:


你的 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

12
2018-02-13 13:01





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


1
2018-02-13 13:04





你有一个名为Profiles的表,你在From中“创建”一个名为Profiles的临时表,这将是我猜测是什么导致了这个问题。打电话给你的临时香蕉,试试吧 SELECT DISTINCT bananas.ID FROM 看看是否有效


0
2018-02-13 13:01





如错误所示,您加入的每个表都有一个名为的列 ID。你必须指定哪个 ID 你想要的专栏(Profiles.ID 要么 FriendList.ID)或包括 ID 在连接条件下。


0
2018-02-13 13:01





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


0
2018-02-13 13:02