2013-03-06 34 views
0
SELECT area_id, 
      area_name, 
      (select count(*) from applications 
        where claims_status=1 and 
        center_name=c.area_id) as cont 
    FROM apparea c where cont<>0 

我試圖從anothere表中獲取字段和相關計數,但上面的查詢不起作用。查詢涉及兩個不同的表格(apparea,應用程序)。上述查詢有錯誤,我正在尋找替代方法來實現這一點。MySQL查詢 - WHERE子句執行時可能還沒有確定where子句列值的未知列

+0

你得到什麼錯誤? – 2013-03-06 10:38:28

+0

'where子句'中的未知列'cont'。 – user1854007 2013-03-06 10:39:16

回答

1

您的列cont的別名在WHERE子句中不可用。您將要使用類似這樣的東西:

SELECT area_id, 
    area_name, 
    cont 
FROM 
(
    SELECT area_id, 
    area_name, 
    (select count(*) 
    from applications 
    where claims_status=1 
    and center_name=c.area_id) as cont 
    FROM apparea c 
) c 
where cont<>0 

這也可以寫成使用LEFT JOIN

select c.area_id, 
    c.area_name, 
    a.cont 
from apparea c 
left join 
(
    select count(*) cont, 
    center_name 
    from applications 
    where claims_status=1 
    group by center_name 
) a 
    on c.area_id = a.center_name 
+0

其工作...今天我學到的另一種方法......謝謝......但這是最佳優化?只是問.. – user1854007 2013-03-06 10:51:25

+0

@ user1854007那麼問題是,當你在'SELECT'中提供別名時,它在'WHERE'中不可用,所以你必須解決它。如果您確定在「應用程序」表中始終有匹配的行,那麼使用「LEFT JOIN」的第二個版本也可以更改爲「INNER JOIN」。編寫查詢的方法有很多,您只需要弄清楚什麼對您的情況最適合。 :) – Taryn 2013-03-06 10:55:03

0

嘗試此查詢

SELECT 
    c.area_id, 
    c.area_name, 
    cnt 
FROM 
    apparea c, 
    (select 
      center_name, 
      count(*) AS cnt 
    from 
      applications 
    where 
      claims_status=1 
    GROUP BY 
      center_name 
    HAVING 
      count(*) > 0) cont 
where 
    c.area_id = cont.center_name; 

得到了各center_name計數和然後加入表格以獲得每個區域的數量

+0

錯誤代碼:1054.'字段列表'中的未知列'c.cnt'.......我已將c.cont <> 0更改爲c.cnt <> 0 ... – user1854007 2013-03-06 10:46:30

+0

檢查編輯。我假設你不想讓計數爲0? – Meherzad 2013-03-06 10:49:42