多対多の関連テーブルでのSQLの書き方について教えてください。


テーブル1(社員テーブル)
社員ID | 社員名
1 | 田中

テーブル2(資格テーブル)
資格ID | 資格名
1 | 普通免許
2 | 医師免許

テーブル3(社員資格紐付けテーブル)
社員ID | 資格ID
1 | 1

出力したい結果(全部の資格に対する、社員「田中」の有無を見たいです)
資格名 | 資格の有無
普通免許 | 有
医師免許 | 無

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/11/06 17:13:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント100pt

お言葉に甘えて転記します

SELECT t1.資格名
    , (CASE
        WHEN
            EXISTS(
                SELECT
                FROM 社員資格紐付けテーブル t2
                WHERE 社員ID = 1
                AND t2.資格ID = t1.資格ID
            )
        THEN '有'
        ELSE '無'
        END
    ) AS 資格の有無
FROM 資格テーブル t1;
  • id:windofjuly
    うぃんど 2011/11/06 16:33:56
    パッと思い浮かんだのは下記のようなものだけど・・・
    お使いのRDBMSが不明なので、どうだろう?
    SQLite3のような気はするけど、今はちょっと触れる環境にないので・・・
     
    >|sql|
    SELECT t1.資格名,
    (CASE
    WHEN
    EXISTS(
    SELECT
    FROM 社員資格紐付けテーブル t2
    WHERE 社員ID = 1
    AND t2.資格ID = t1.資格ID
    )
    THEN '有'
    ELSE '無'
    END
    ) AS 資格の有無
    FROM 資格テーブル t1;
    ||<
  • id:nemutaiyo
    すみません。MySQLです。SQL正しく表示できました。ありがとうございます。(是非回答に転記してください。支払いたいです)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません