2012-07-13 41 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