- ベストアンサー
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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
データの関係性がイマイチ理解できないのですが・・ 投稿内容通りに、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 ;
その他の回答 (1)
- kazuho_goo
- ベストアンサー率56% (34/60)
こんなんでできそうな気がしますが、どうでしょう? こちらに環境がありませんので試していません。 もしも、期待されている結果と違う場合はお手数ですが補足をお願いいたします。 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);
お礼
korochanさん ありがとうございました。 なぜかぜんぜん思いつきませんでした。