以下のクエリで期待した結果が得られますか?
- placeテーブルとkindテーブルをCROSS JOINして全組み合わせを作成。 → t1
- itemテーブルを場所と種別でグループ化してアイテム数を算出。 → t2
- t1にt2をLEFT JOINで結合。
- アイテムが存在しない場合はNULLになるので、COALESCEでNULLの場合は0にする。
- 場所と種別でソート。
sql
1CREATE TABLE place (場所id NUMBER, 場所 VARCHAR2(10));
2INSERT INTO place VALUES(1,'本');
3INSERT INTO place VALUES(2,'鉛筆');
4
5CREATE TABLE kind (種別id NUMBER, 種別 VARCHAR2(10));
6INSERT INTO kind VALUES(1,'棚');
7INSERT INTO kind VALUES(2,'机');
8
9CREATE TABLE item (アイテムid NUMBER, 場所id NUMBER, 種別id NUMBER);
10INSERT INTO item VALUES(1,1,1);
11INSERT INTO item VALUES(2,1,1);
12INSERT INTO item VALUES(3,1,1);
13INSERT INTO item VALUES(4,2,2);
14
15SELECT
16 t1.場所,
17 t1.種別,
18 COALESCE(t2.アイテム数, 0) アイテム数
19FROM
20 (SELECT p.場所id, k.種別id, p.場所, k.種別 FROM place p CROSS JOIN kind k) t1
21 LEFT JOIN
22 (SELECT 場所id, 種別id, COUNT(*) アイテム数 FROM item GROUP BY 場所id, 種別id) t2
23 ON t1.場所id = t2.場所id AND t1.種別id = t2.種別id
24ORDER BY t1.場所id, t1.種別id;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。