SQL子查询语法错误附近')' - 不缺少别名

时间:2013-11-26 16:54:57

标签: sql reporting-services sql-server-2008-r2 subquery ssrs-2000

我遇到与this one类似的问题,但在这种情况下的解决方案是为子查询添加别名。在我的例子中,我的每个子查询都有一个别名,但我在每个子查询的末尾都收到了消息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中,连接使用子查询,该子查询中的FROMWHERE子句也使用子查询。在我的实际查询中,LEFT JOINs都具有相同的结构。我不明白的一件事是嵌套子查询不需要别名。如果我尝试使用嵌套子句的别名,我会收到错误。因此,只有LEFT JOINs中的外部查询出现问题。

我在其他帖子中读到子查询只能返回单个字段的结果,但是我看到很多例子,其中从子查询返回多个字段,所以我不认为这是问题所在。或者,如果这将是一个问题,错误将是不同的。我读过的所有内容都将此问题归结为缺少子查询的别名,并且我得到的结果是否有别名(根本没有别名,以及使用AS而不使用AS )。

1 个答案:

答案 0 :(得分:2)

您需要为作为结果集使用的每个子查询提供表别名:

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