Синтаксическая ошибка подзапроса SQL рядом с ')' - не пропущен псевдоним
У меня похожая проблема с этим, но решение в этом случае заключалось в добавлении псевдонима в подзапрос. В моем случае каждый из моих подзапросов имеет псевдоним, но я получаю сообщение Incorrect syntax near ')'
в конце каждого из моих подзапросов.
Я пишу запрос в 2008 R2, но нацеливаюсь на SSRS 2000
Весь мой запрос довольно длинный, но вот сокращенная версия псевдокода:
SELECT A
,B
,C
,D
,E
FROM
(
SELECT A as 'A', B as 'B', id
FROM table t
WHERE A = 'some value'
GROUP BY A, B
) AS sub1
LEFT JOIN
(
SELECT C as 'C', D as 'D', id
FROM
(
SELECT id
FROM nutherTable
WHERE id IN
(
SELECT DISTINCT id
FROM sub1
)
)
WHERE D like '%param%'
) AS sub2
ON sub2.id = sub1.id
LEFT JOIN
(
SELECT E as 'E', id
FROM finalTable
WHERE E IS NOT NULL
) AS sub3
ON sub3.id = sub2.id
Вы заметите, что в первом LEFT JOIN
, соединение использует подзапрос, а FROM
а также WHERE
предложения в этом подзапросе также используют подзапросы. В моем реальном запросе оба LEFT JOINs
имеют такую же структуру. Я не понимаю, что вложенные подзапросы не требуют псевдонима. Если я пытаюсь использовать псевдоним с вложенными предложениями, я получаю сообщение об ошибке. Так что это только проблемы с внешними запросами в LEFT JOINs
,
В других публикациях я читал, что подзапросы могут возвращать результаты только для одного поля, но я видел много примеров, когда из подзапроса возвращаются несколько полей, поэтому я не думаю, что здесь проблема. Или, если это будет проблемой, ошибка будет другой. Все, что я прочитал, объясняет эту проблему отсутствием псевдонима для подзапроса, и я получаю те же результаты с псевдонимом или без него (без псевдонима вообще, а также с использованием AS
и не используя AS
).
1 ответ
Вам необходимо предоставить псевдоним таблицы для каждого подзапроса, который вы используете в качестве результирующего набора:
LEFT JOIN
(
SELECT C as 'C', D as 'D', id
FROM
(
SELECT id
FROM nutherTable
WHERE id IN
(
SELECT DISTINCT id
FROM sub1
)
) SomeTableName -- HERE IS THE PROBLEM
WHERE D like '%param%'
) AS sub2