我遇到与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
中,连接使用子查询,该子查询中的FROM
和WHERE
子句也使用子查询。在我的实际查询中,LEFT JOINs
都具有相同的结构。我不明白的一件事是嵌套子查询不需要别名。如果我尝试使用嵌套子句的别名,我会收到错误。因此,只有LEFT JOINs
中的外部查询出现问题。
我在其他帖子中读到子查询只能返回单个字段的结果,但是我看到很多例子,其中从子查询返回多个字段,所以我不认为这是问题所在。或者,如果这将是一个问题,错误将是不同的。我读过的所有内容都将此问题归结为缺少子查询的别名,并且我得到的结果是否有别名(根本没有别名,以及使用AS
而不使用AS
)。
答案 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