簡體   English   中英

帶左聯接的SQL子查詢導致無效的對象錯誤

[英]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 MainQueryMainQuery超出sub1WHERE子查詢的范圍?

對於上下文,我的任務是將使用臨時表的查詢重寫為可以在SSRS 2000上部署的報表中使用的查詢。我的MainQuerysub1sub2是原始查詢中的臨時表。 這些臨時表在其中使用了子查詢,我在翻譯中保留了這些子查詢。 但是原始查詢的優點是可以分別創建每個臨時表,然后再合並結果。 臨時表和子查詢對我來說是新的,所以我不確定如何在兩者之間進行調整,或者這是否是正確的方法。

您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM