我正在尝试将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使用不同的别名,但没有成功。
我该如何解决这个问题?
答案 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.columnnameselect * 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名称的列。