Q&A
前提
以下のように、tableAのIDに紐づくtableBがあります。
現在、これらのテーブルに対してtableAの結果全てと、tableAのIDに紐づいているtableBの件数を表示しています。
tableA id | name ―――――――― 1 | 一郎 2 | 二郎 3 | 三郎 tableB id | tableA_id ―――――――― 101 | 1 102 | 1 103 | 1 201 | 1 303 | 3 現在表示内容 1 | 一郎 | 3 2 | 二郎 | 1 3 | 三郎 | 1
現在のクエリ
SELECT id, name, cnt FROM tableA LEFT JOIN (SELECT tableA_id, COUNT(id) AS TKNSU FROM tableB GROUP BY tableA_id) ON id = tableA_id
実現したいこと
現在の状態に追加して、条件が指定された場合のみtableBのidをWHERE条件に追加してSELECTを行いたいです。
期待する表示結果 例:条件としてtableBのidが102と指定された場合 1 | 一郎 | 3 何も指定しなかった場合は現在と同じ表示 1 | 一郎 | 3 2 | 二郎 | 1 3 | 三郎 | 1
WHEREにtableBのidを指定した場合と指定しなかった場合でうまく上記の様に抽出する方法はないでしょうか。
試したこと
SELECT id, name, cnt FROM tableA LEFT JOIN (SELECT tableA_id, COUNT(id) AS TKNSU FROM tableB GROUP BY tableA_id) ON id = tableA_id LEFT JOIN tableB ON tableA.id = tableA_id
とすると、WHEREでtableB.id=102とすると期待した結果は表示されますが、外部結合なので未指定時に一郎が3件出てしまうところで困っています。
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/12/16 05:17