Неправильный синтаксис в sql-скрипте

119
8

не знаю, что я делаю неправильно здесь.

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".

спросил(а) 2016-09-24T01:58:00+03:00 4 года назад
1
Решение
57

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 справа (нет общего атрибута)

ответил(а) 2016-09-24T02:06:00+03:00 4 года назад
40

Таким образом, у вас действительно есть пара проблем.

    Отсутствует условие между псевдонимами таблицы a & b Отсутствующие псевдонимы таблиц, для которых таблица извлекает столбцы из нее, будет вызвана двусмысленной ошибкой столбца и, наконец, внутренние соединения обратно в одну и ту же таблицу могут не понадобиться.

В вашем коде кажется, что вы получаете все пользователи, затем присоединяетесь, чтобы убедиться, что у workbkname также есть менеджер, который не находится в среднем уровне... и не является нулевым. Затем присоединяется к Get all else, который работает на рабочей книге....


Я бы предположил, что вы на самом деле пытаетесь получить всех пользователей, которые не являются "User Name" или "User Name/ID Owner", у которых есть имя пользователя, которое НЕ IN ("Средний уровень", "Управление доступом пользователей", "Менеджер отчетов")). Если так, я бы сделал это следующим образом:

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

ответил(а) 2016-09-24T02:13:00+03:00 4 года назад
40

вам нужно добавить

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

ответил(а) 2016-09-24T02:08:00+03:00 4 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема