1

クエリに問題があります。2 つのテーブルがあることを確認してください。

table a:
progid     |    name  |   type
12         |    john  |    b
12         |    anna  |    c
13         |    sara  |    b
13         |    ben   |    c
14         |    alan  |    b
15         |    george|    b

table b:
progid     |    name  |   type
12         |    john  |    b
12         |    anna  |    c
13         |    sara  |    b
14         |    alan  |    b
15         |    george|    b

テーブル a はカウントを取得します

progid   | count(*)
12       | 2
13       | 2
14       | 1
15       | 1

テーブルbが取得します

progid   | count(*)
12       | 2
**13     | 1**<-this is what I want to find different count
14       | 1
15       | 1

私が欲しいのは、テーブル b のどの progid がテーブル a にないかをカウントで見つけることです (ご覧のとおり、prog id はそこにありますが、それらは同時にそこにあるはずです! したがって、ben はなくなりましたが、progid 13 はそこにあります)

テーブル内のカウントが異なる場所で progid を取得したいので、次のことを試しました。

select a.progid from 
(select progid ,count(*) total from tablea group by progid) a,
(select progid ,count(*) total from tableb group by progid) b 
where
a.progid=b.progid and a.total<>b.total;

私はb.total無効な識別子を取得します

if I use a.count(progid)<>b.count(progid)

エラーは、そこでグループ関数を使用できないと言っています。何かアイデアはありますか? 私は絶望的です!


わかりました、私はあなたの答えをチェックしました。これが元の答えです

select a.beneficiarioid from 
(select beneficiarioid,count(*) total from lmml_ejercicio_2012_3 where programaid=61 group by beneficiarioid order by beneficiarioid) a,
(select beneficiarioid,count(*) total from ejercicio_2012_3 where programaid=61 group by beneficiarioid order by beneficiarioid) where
a.beneficiarioid=b.beneficiarioid and a.total<>b.total;

とにかく、私はあなたのクエリを試して、あなたに知らせます!! どうもありがとうございます!!ところで、それはOracle 11gです

4

2 に答える 2

3

サブクエリを使用して各カウントを取得し、FULL OUTER JOIN を使用してそれらを結合できる必要があります。

select coalesce(a.progId, b.progId) progid,
  coalesce(a.atotal, 0) atotal,
  coalesce(b.btotal, 0) btotal
from
(
  select progid, count(*) aTotal
  from tablea
  group by progId
) a
full outer join
(
  select progid, count(*) bTotal
  from tableb
  group by progId
) b
  on a.progid = b.progid
where coalesce(a.atotal, 0) <> coalesce(b.btotal, 0);

SQL Fiddle with Demoを参照してください。あるテーブルに行があり、他のテーブルには存在しない場合に、FULL OUTER JOIN を使用しました。

于 2013-05-31T16:20:17.233 に答える