2013-06-12 100 views
2

的條款,我有這個select語句的問題:不能引用聚合函數的別名在子查詢

SELECT 
    field1, 
    MIN(field2) AS MinOfField2, 
    (SELECT id FROM table2 WHERE something = MinOfField2) AS table2_id 
FROM table1 
GROUP BY field1 

當我嘗試執行此查詢,訪問彈出一個對話框,要求我輸入參數'MinOfField2'的值。

首先,我試圖直接在子查詢中使用聚合函數,但似乎也不允許。

enter image description here

現有最接近的問題,我能找到的是這個:Access alias in subquery

回答

2

我相信這是你要找的查詢:

SELECT 
    t1.field1, 
    t1.MinOfField2, 
    table2.id AS table2_id 
FROM 
    (
     SELECT 
      field1, 
      MIN(field2) AS MinOfField2 
     FROM table1 
     GROUP BY field1 
    ) t1 
    INNER JOIN 
    table2 
     ON t1.MinOfField2=table2.something 
+0

好吧,我想我明白你的正在做。所以基本上,答案是不可能在子查詢中引用別名? – Zalumon

+2

@Zalumon更正,子查詢無法引用在其自身之外創建的別名,因此Gord爲何使用派生表與連接。作爲一個方面說明,使用派生表幾乎總是比子選擇更快:) –

+0

@Matt感謝您的確認。我相信派生表更快,但就我的口味而言,這種說法已經過於複雜(意味着每次我看到它時,至少需要15分鐘才能瞭解它在做什麼)。子選擇對我來說似乎更可讀。我幾乎總是選擇性能可讀性。我最終通過分兩步完成我的任務來解決這個問題,完全避免了這種SQL。 – Zalumon