0

親クエリ内でサブクエリの結果を使用するにはどうすればよいですか?

私のコードは次のようになります。

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の値を表示/維持する必要があります。

私を助けることができる誰かがいますか、私はうまくいくためにこれがひどく必要です、私はすべての助けに感謝します。

前もって感謝します。

4

4 に答える 4

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 
于 2012-07-13T06:16:19.570 に答える
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
于 2012-07-13T06:02:49.153 に答える
0

サブクエリがセットを返すとします。したがって、次を使用してください---

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

于 2012-07-13T06:05:33.703 に答える
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
于 2012-07-13T06:30:34.200 に答える