我有一个具有以下结构的查询:
编辑查询的原始结构不太具有代表性。
SELECT A
,B
,C
,D
FROM ( SELECT id,A
FROM myTable
WHERE conditions
GROUP BY id,A) MainQuery
LEFT JOIN (SELECT id, B, C
FROM myView
WHERE id IN
(
SELECT DISTINCT id
FROM MainQuery
)
) sub1
ON sub1.B = MainQuery.A
LEFT JOIN (SELECT MainQuery.id, D
FROM myOtherView
WHERE sub1.id IN
(
SELECT DISTINCT id
FROM MainQuery
)
) sub2
ON sub2.D = sub1.C
当我运行查询时,收到错误消息Invalid object name 'MainQuery'.
当我在LEFT JOINs
语句中注释SELECT
及其提供的字段时,查询运行正常。我也尝试了AS MainQuery
,但我得到了相同的结果。
我怀疑它与范围有关。我试图SELECT DISTINCT id FROM MainQuery
的位置MainQuery
WHERE
范围内sub1
子查询的范围是否超出范围?
对于上下文,我的任务是将使用临时表的查询重写为可在SSRS 2000上部署的报表中使用的查询。我的MainQuery
,sub1
和{{ 1}}是原始查询中的临时表。那些临时表使用了它们中的子查询,我在翻译中保留了这些子查询。但原始查询的优点是分别创建每个临时表,然后加入结果。临时表和子查询对我来说是新的,所以我不确定如何在两者之间进行调整,或者这是否是正确的方法。
答案 0 :(得分:3)
您的MainQuery的SQL无效。单独运行并查看:
SELECT A, id
FROM myTable
WHERE conditions
GROUP BY A
您不能选择A和id,但只能选择A组。要么您还需要按ID分组,要么将id包装在聚合函数中,例如min或max。
如果解决了这个问题,看起来你的另一个问题就是你说“LEFT JOIN”,然后将你的LEFT JOINED表的列放在where子句的左侧。请参阅下面的内容,我在JOIN中翻转sub1.B和MainQuery.A。
SELECT A
,B
,C
,D
FROM ( SELECT A, id
FROM myTable
WHERE conditions
GROUP BY A,id) MainQuery
LEFT JOIN nutherTable sub1
on MainQuery.A = sub1.B
and MainQuery.id = sub1.id
LEFT JOIN (SELECT D ...) sub2
ON sub1.C = sub2.D