0

我有類似的問題this one,但在這種情況下的解決方案是添加一個別名到子查詢。就我而言,我的每個子查詢都有一個別名,但我在每個子查詢的末尾都收到了消息Incorrect syntax near ')'SQL子查詢語法錯誤附近')' - 沒有丟失別名

我寫在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)。

+2

你確定你是不是之前'缺少一個別名,其中d LIKE「%PARAM%」' ? –

回答

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 
+0

謝謝,@Yuck。這解決了錯誤。現在我在第一個子查詢中遇到了一個不同的錯誤。 '無效的對象名'sub1'。我嘗試了幾次重命名。不知道還有什麼要試試我的頭頂。 – tmoore82