1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

株式会社シンプルウェイAdvent Calendar 2024

Day 4

SQLでカテゴリグループ名、小グループ名を取得する方法

Posted at

はじめに

カテゴリIDと、そのカテゴリ内の小グループIDを保持しているデータがあり、カテゴリ名と小グループ名を取得したいとき、クエリの作成に苦戦したので、備忘録として取得した方法を記載します。

データ構造

メインのデータ(data_list)

id categoryGroupNo subGroupNo quantity
1 1 1 10
2 1 2 5
3 2 1 6
4 2 2 0

カテゴリグループ(category_group)

categoryGroupNo categoryGroupName
1 果物
2 野菜

小グループ

果物グループ(fruit_group)

subGroupNo subGroupName
1 りんご
2 みかん

野菜グループ(vegetable_group)

subGroupNo subGroupName
1 キャベツ
2 白菜

クエリの作成

「カテゴリグループ名」と「小グループ名」を取得するSQLクエリを作成します。

SELECT
    dl.id,
    dl.categoryGroupNo,
    cg.categoryGroupName,
    dl.subGroupNo,
    CASE
        WHEN dl.categoryGroupNo = 1 THEN fg.subGroupName
        WHEN dl.categoryGroupNo = 2 THEN vg.subGroupName
        ELSE NULL
    END AS subGroupName,
    dl.quantity
FROM
    data_list dl
LEFT JOIN
    category_group cg
    ON dl.categoryGroupNo = cg.categoryGroupNo
LEFT JOIN
    fruit_group fg
    ON dl.categoryGroupNo = 1 AND dl.subGroupNo = fg.subGroupNo
LEFT JOIN
    vegetable_group vg
    ON dl.categoryGroupNo = 2 AND dl.subGroupNo = vg.subGroupNo;

クエリの説明

  1. データ一覧を基に情報を取得:
    • メインのテーブル data_listを取得
  2. カテゴリグループ名を結合:
    • category_group テーブルを category_group_no で結合し、カテゴリグループ名を取得します。
  3. 小グループ名を条件で取得:
    • CASE 文を使用し、category_group_no の値に応じて対応するテーブル(fruit_group、vegetable_group)を結合し、小グループ名を取得します。

実行結果

実行すると以下のようにグループ名、小グループ名が取得できました。

id categoryGroupNo categoryGroupName subGroupNo subGroupName quantity
1 1 果物 1 りんご 10
2 1 果物 2 みかん 5
3 2 野菜 1 キャベツ 6
4 2 野菜 2 白菜 0
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?