2012-07-13 39 views
0

如何在其父查詢中使用子查詢的結果?在mysql中使用子查詢的結果

我的代碼看起來像這樣。

select (select count(*) from tbl1 group by field) as result1, 
     (select count(*) from tbl2 group by field) as result2, 
     (select count(*) from tbl3 group by field) as result3, 
     result1 + result2 - result3 as total1, 
     result1 + result2 as total2 
from tbl4 ; 

一些建議直接添加子查詢。

(select count(*)*....) as result1 + (select count(*)*....) as result2 

但我認爲它不想我需要,bcoz我也需要在結果中顯示/維護result1的值。

有沒有人可以幫助我,我非常需要這個工作,我感謝每一個幫助。

在此先感謝。

+0

得到的表你需要什麼,請表明,因爲你需要什麼,不清楚 – 2012-07-13 05:56:55

+0

result:如果result1爲3,result2爲2,result3爲4,那麼total1將爲1(result1 + result2 - result3) – avien 2012-07-13 06:00:36

+0

@avien:那麼你的查詢出了什麼問題? – 2012-07-13 06:02:38

回答

0

你將不得不包裹查詢子查詢中,以便能夠訪問別名的列名:

SELECT a.result1 + a.result2 - a.result3 AS total1, 
     a.result1 + a.result2 AS total2 
    FROM (
      select (select count(*) from tbl1 group by field) as result1, 
        (select count(*) from tbl2 group by field) as result2, 
        (select count(*) from tbl3 group by field) as result3 
     ) a 

但是,這實際上是一個更好的解決方案:

SELECT a.cnt + b.cnt - c.cnt AS total1, 
      a.cnt + b.cnt AS total2 
     FROM (SELECT COUNT(*) cnt FROM tbl1 GROUP BY field) a 
CROSS JOIN (SELECT COUNT(*) cnt FROM tbl2 GROUP BY field) b 
CROSS JOIN (SELECT COUNT(*) cnt FROM tbl3 GROUP BY field) c 
+0

我忘了告訴我所有的子查詢取決於我的我的tbl4這樣(select(count(*)from tbl1 group by field where tbl1.field = tbl4.field) – avien 2012-07-13 06:06:38

0

假設你子查詢將返回一個集合。因此,只要使用以下---

SELECT column1, column2, column3 FROM table1 WHERE column3 IN (SELECT column3 FROM table2 WHERE condition);

0
select count1, count2, count3, 
    count1+count2-count3 as total1, count1+count2 as total2 
    from tbl4 
inner join 
    (select count(*) as count1,name from tbl1 group by name)as result1 
on tbl4.name=result1.name 
inner join 
    (select count(*)as count2,name from tbl2 group by name) as result2 
on tbl4.name=result2.name 
inner join 
    (select count(*)as count3,name from tbl3 group by name) as result3 
on tbl4.name=result3.name 
0

請嘗試此查詢,讓我知道

select result1.cnt,result2.cnt,result2.cnt,result1.cnt + 
    result2.cnt - result3.cnt as total1, 
    result1.cnt + result2.cnt as total2 
    from 
(select field,COUNT(*) cnt from tbl1 group by field) as result1 
    join 
(select field,COUNT(*) cnt from tbl2 group by field) as result2 
on result1.field=result2.field 
join 
(select field,COUNT(*) cnt from tbl3 group by field) as result3 
on result3.field=result2.field 
join tbl4 
on tbl1.field = tbl4.field