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

解決済みの質問

SQL HAVING句の使い方について

以下のテーブルAとテーブルBを結合して結果テーブルを出力したいと考えています。
(テーブルA上のIDのカウントした数をテーブルBに結合して出力したい。)

テーブルA
-----------
CATEID
aaa001
bbb001
ccc003
ddd004

テーブルB
-----------
IDNAME
001101
002102
003103
004104

結果テーブル
----------------------
IDNAMECOUNT
0011012
0021020
0031031
0041041


そこで、
===================================
SELECT B.ID, B.NAME, COUNT(A.ID)
FROM TABLE_A B, TABLE_B B
GROUP BY B.ID, B.NAME, A.ID
HAVING A.ID = B.ID
===================================
とSQLを書いてみましたが、

0021020

のテーブルAにIDが存在していない列が結果として表示されませんでした。
WHERE句でいう「WHERE A.ID =* B.ID」のようなことを行いたいのですが、どのように行えばよいでしょうか?

よろしくお願いいたします。

投稿日時 - 2008-07-17 17:51:01

QNo.4183961

困ってます

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

なにか普通に処理してはいけない(=HAVINGを使わなくてはならない)事情をお持ちですか?

こうやればできますが、CROSS JOINはCostlyです。
SELECT b.ID, b.NAME,
SUM(CASE WHEN A.ID=B.ID THEN 1 ELSE 0 END)
FROM table_a a, table_b b
GROUP BY b.ID, b.NAME

普通は、こんな風に書くのでは。。?
SELECT
b.ID,
b.NAME,
COUNT(DISTINCT cate)
FROM table_b b
LEFT OUTER JOIN table_a a ON a.ID=b.ID
GROUP BY b.ID,b.NAME

SELECT
b.ID,
b.NAME,
NVL(CNT,0)
FROM table_b b
LEFT OUTER JOIN
(SELECT ID,COUNT(*) CNT
FROM table_a
GROUP BY ID) a ON a.ID=b.ID

投稿日時 - 2008-07-17 21:05:45

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

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

回答(1)

あなたにオススメの質問