みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

OUTER JOINについて

こんにちわ。
OUTER JOINを使ったSQL文について質問させてください。
今3つのテーブル(EMPLOYEES, CUSTOMERS, ZIPCODES)があるとします。郵便番号ごとに従業員とお客さんのIDを表示するSQLはわかるのですが(下に書きます)、郵便番号ごとに従業員とお客さんの数を表示するSQL文がわからず、途方に暮れてます。どなたか教えていただけないでしょうか? よろしくお願いいたします。

郵便番号ごとに従業員とお客さんのID
SQL> select z.zip, e.eno, c.cno from zipcodes z full outer join employees e
on (z.zip=e.zip) full outer join customers c on (z.zip=c.zip);

ZIP ENO CNO
---------- ---------- ----------
49008 1001   1111
49009    2222
49001 1000 3333
49017 1002
49023
49024


それをこうしたいのですが・・

ZIP ENUM CNUM
 ---------- ---------- ----------
49008 1 1
49009 1
49001 1 1
49017 1
49023
49024

投稿日時 - 2006-03-27 14:05:44

QNo.2054529

すぐに回答ほしいです

質問者が選んだベストアンサー

データの関係性がイマイチ理解できないのですが・・

投稿内容通りに、SQLを素直に書き直すと、

select
z.zip,
count(e.eno) enum,
count(c.cno) cnum
from zipcodes z
full outer join employees e on (z.zip=e.zip)
full outer join customers c on (z.zip=c.zip)
group by z.zip
;

投稿日時 - 2006-03-28 00:36:49

お礼

korochanさん
ありがとうございました。
なぜかぜんぜん思いつきませんでした。

投稿日時 - 2006-03-31 14:34:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こんなんでできそうな気がしますが、どうでしょう?
こちらに環境がありませんので試していません。
もしも、期待されている結果と違う場合はお手数ですが補足をお願いいたします。
select z.zip, nvl(e.e_cnt, 0) e_cnt, nvl(c.c_cnt, 0) c_cnt
from zipcodes z
full outer join (select count(*) e_cnt, zip from employees group by zip) e
on (z.zip=e.zip)
full outer join (select count(*) c_cnt, zip from customers group by zip) c
on (z.zip=c.zip);

投稿日時 - 2006-03-27 16:47:56

あなたにオススメの質問