Синтаксическая ошибка подзапроса 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
Другие вопросы по тегам