为表格多次指定了列xxx

时间:2017-04-26 12:13:42

标签: sql-server tsql join db2 alias

我正在尝试将db2简单查询调整为SQL SERVER。此查询在db2上正常工作

select * 
from pb_console.users u 
join ( 
     select * from pb_console.users_user_role j join  
     pb_console.users_roles r on j.role_id = r.role_id) as jj 
on jj.user_id = u.user_id

在sql server上失败并显示错误:

The column 'ROLE_ID' was specified multiple times for 'jj'

我已尝试从联接的左表中删除角色_id:

select * from pb_console.users u join ( 
    select user_id, role_rif from 
    pb_console.users_user_role j join (select role_id, role_name from 
pb_console.users_roles) r 
on 
j.role_id = r.role_id) as jj on jj.user_id = u.user_id

但导致了。

The column 'role_id' was specified multiple times for 'jj'.

我还尝试为第一个role_id使用不同的别名,但没有成功。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

由于表ColumnName中存在pb_console.users_user_role & pb_console.users_roles ROLE_ID ,因此引发错误,因此请尝试指定仅在下面列出的列

SELECT * 
FROM pb_console.users u 
join ( 
     SELECT J.RoleID,J.User_ID FROM pb_console.users_user_role j 
     JOIN pb_console.users_roles r ON j.role_id = r.role_id) AS jj 
on jj.user_id = u.user_id

答案 1 :(得分:2)

select * from pb_console.users

不应使用语法。

处理此问题的静态方法: 在SSMS编辑器中,右键cb在pb_console.users表上获取"选择*"详细说明的语法...并覆盖Joby或Sandip之前告知的别名。

动态方式: 创建一个存储过程来检索表的当前结构,以构建一个运行通过" EXECUTE" ...更难的方式的SQL语句......

答案 2 :(得分:1)

您的代码中出现错误:Incorrect syntax near the keyword 'from',因为您没有在select语句中指定任何列,请在下面的查询语句中指定必需的列

select from pb_console.users_roles

应该是

select role_id from pb_console.users_roles

错误:

  

'jj'多次指定了'role_id'列。

在所有选择语句

中尝试使用 alias.columnname
select * from pb_console.users u join ( 
    select j.user_id, j.role_id from 
    pb_console.users_user_role j join (select role_id, role_name from 
pb_console.users_roles) r 
on 
j.role_id = r.role_id) as jj on jj.user_id = u.user_id

答案 3 :(得分:0)

请不要使用from *代替*中的列名,否则列名可能会相互冲突。

在我的情况下,

作为底部代码:

select a.*,b.*,a.x1 from a
join b on b.fkId=a.pkid

a。*和a.x1彼此冲突,因为a。*包含a.x1列,而返回表包含2个具有x1名称的列。