dポイントプレゼントキャンペーン実施中!

以下のテーブル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」のようなことを行いたいのですが、どのように行えばよいでしょうか?

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

A 回答 (1件)

なにか普通に処理してはいけない(=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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!