[英]SQL Subquery w/LEFT JOIN causing Invalid Object Error
我有以下結構的查詢:
編輯查詢的原始結構不是很具有代表性。
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
超出sub1
內WHERE
子查詢的范圍?
對於上下文,我的任務是將使用臨時表的查詢重寫為可以在SSRS 2000上部署的報表中使用的查詢。我的MainQuery
, sub1
和sub2
是原始查詢中的臨時表。 這些臨時表在其中使用了子查詢,我在翻譯中保留了這些子查詢。 但是原始查詢的優點是可以分別創建每個臨時表,然后再合並結果。 臨時表和子查詢對我來說是新的,所以我不確定如何在兩者之間進行調整,或者這是否是正確的方法。
您的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.