2016-09-23 57 views
0

不知道我在做什么错在这里。SQL脚本语法不正确

SELECT DISTINCT 
    managername, 
    username, 
    UserStatus, 
    Usertitle, 
    Loginid, 
    Server, 
    DBName, 
    Response, 
    busjustify, 
    Comments, 
    dtaccessnoneed 
FROM (SELECT 
    username, 
    UserStatus, 
    Usertitle, 
    Loginid, 
    Server, 
    DBName, 
    Response, 
    busjustify, 
    Comments, 
    dtaccessnoneed, 
    workbkname 
FROM tbldb2midtierresponse 
WHERE username IS NOT NULL 
AND username <> 'User Name') a 
INNER JOIN (SELECT DISTINCT 
    managername, 
    workbkname 
FROM tbldb2midtierresponse 
WHERE managername NOT IN ('Mid Tier', 'User Access Management', 'Reporting Manager') 
AND managername IS NOT NULL) b 

INNER JOIN (SELECT 
    username, 
    UserStatus, 
    Usertitle, 
    Loginid, 
    Server, 
    DBName, 
    Response, 
    busjustify, 
    Comments, 
    dtaccessnoneed, 
    workbkname 
FROM tbldb2midtierresponse 
WHERE username IS NOT NULL 
AND username <> 'User Name/ID Owner') c 
    ON b.workbkname = c.workbkname 

我得到的错误是在最后一行。

请帮我在做错的地方是这个脚本?

Msg 102,Level 15,State 1,Line 8 'workbkname'附近的语法不正确。

回答

1

Simplfied:

select * 
from (select ...) a 
inner join (select ...) b -- [!] missing on x.attr = b.attr statement 
inner join (select ...) c on b.workbkname = c.workbkname 

您没有加入表B权(没有指定共同属性)

+1

OP也缺少外部选择的表别名,这将导致模糊的列错误。 – Matt

+0

谢谢你matt什么是OP? – user300485

+0

@ user300485 OP = Original Post,至少这是我从所有评论中看到的,我也很新 – Matt

0

你需要添加

a.workbkname = b.workbkname 

select distinct managername, username,UserStatus, Usertitle, Loginid,Server,DBName,Response,busjustify, Comments, dtaccessnoneed 
from 
(select username,UserStatus, Usertitle, Loginid,Server,DBName,Response,busjustify, Comments, dtaccessnoneed,workbkname from tbldb2midtierresponse 
where username is not null and username <> 'User Name') a 
inner join 
(select distinct managername ,workbkname from tbldb2midtierresponse where managername not in ('Mid Tier','User Access Management','Reporting Manager') and managername is not null) b 
on a.workbkname = b.workbkname 
inner join 
(select username,UserStatus, Usertitle, Loginid,Server,DBName,Response,busjustify, Comments, dtaccessnoneed,workbkname from tbldb2midtierresponse where username is not null and username <> 'User Name/ID Owner') c 
on b.workbkname = c.workbkname 
+0

OP也缺少外部选择的表别名,这会导致列模糊不清 – Matt

0

所以你确实有一对夫妇的问题。

  • 缺少表之间的条件别名一个& b
  • 缺少表别名什么表,通过一个不明确的列错误
  • ,最后内部连接回同一个表可能无法从它会拉列是必要的。

在您的代码中,您看到您正在获取所有用户,然后加入以确保workbkname也具有不在中间层中的经理并且不为空。然后加入让所有其他人在工作簿上工作....

我猜你实际上是试图让所有用户不是'用户名'或'用户名/ ID所有者'有一个经理名称不在('Mid Tier','用户访问管理','报告管理器')。如果是这样,我会这样做:

SELECT DISTINCT 
    a.managername 
    ,a.username 
    ,a.UserStatus 
    ,a.Usertitle 
    ,a.Loginid 
    ,a.Server 
    ,a.DBName 
    ,a.Response 
    ,a.busjustify 
    ,a.Comments 
    ,a.dtaccessnoneed 
FROM 
    tbldb2midtierresponse a 
    LEFT JOIN tbldb2midtierresponse m 
    ON a.workbkname = m.workbkname 
    AND m.managername NOT IN ('Mid Tier','User Access Management','Reporting Manager') 
    AND m.managername IS NOT NULL 
WHERE 
    username IS NOT NULL 
    AND username NOT IN ('User Name','User Name/ID Owner') 
    AND m.username IS NOT NULL