2011-04-23 31 views
1

這裏是我的代碼:MySQL的子查詢領域的應用範圍

SELECT field1, field2, 
     (SELECT * FROM table1 WHERE a = field2), 
     (SELECT COUNT(*) 
      FROM (SELECT * 
        FROM table2 
       WHERE c = field2) as t1) as count 
    FROM table3; 

...這裏是錯誤消息:

/* SQL錯誤(1054):未知列在 '字段2' 'where clause'*/

我想執行一個查詢,以獲得table2的總計數。

回答

0

問題是您正試圖使用​​在內部查詢中的外部查詢中聲明的變量。變量在SQL中的作用域與之相反,只能訪問內部查詢。你想要做的(我相信)是尋找具有ctable2的編號,該編號與來自table1a相匹配。這應該給你這個答案。

SELECT 
    table1.a, 
    table2.c, 
    count(*) 
FROM 
    table1 
JOIN 
    table2 ON table2.c = table1.a 
GROUP BY 
    table1.a 
+0

謝謝你的建議!這個例子非常有幫助! – artworker 2011-04-23 07:07:01

0

我重新寫你的查詢爲:

SELECT t3.field1, 
      t3.field2, 
      t1.*, 
      t2.cnt 
    FROM TABLE3 t3 
LEFT JOIN TABLE1 t1 ON t1.a = t3.field2 
LEFT JOIN (SELECT t.c, 
        COUNT(*) AS cnt 
      FROM TABLE2 t 
     GROUP BY t.c) t2 ON t2.c = t3.field2 

的1054錯誤是由於深引用field2兩個子查詢 - 大多數只支持一個級別深度。

+0

謝謝你的建議!這個例子非常有幫助! – artworker 2011-04-23 07:08:06