- 締切済み
結合での取得のしかた
単純なことかもしれませんが、詰まってしまったので宜しくお願い致します。 ユーザ uid/user_name tanaka / 田中 / ikeda / 池田 / yamamoto / 山本 / 趣味 hid/ hno /uid 1 / 1 / tanaka 2 / 2 / tanaka 3 / 3 / tanaka 4 / 2 / ikeda 5 / 3 / ikeda 6 / 3 / yamamoto 趣味マスタ hno/hobby_name 1 / 野球 2 / サッカー 3 / テニス 上記のようなテーブル構成の場合に 趣味が「野球」だけのユーザの一覧を取得したいのですが 可能でしょうか? 宜しければご教示願えれば幸いです。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>「趣味に野球がない人」だけ であればこんな感じ? SELECT U.uid,U.user_name FROM ユーザ AS U LEFT JOIN 趣味 AS H ON U.uid=H.uid AND H.hno=1 WHERE H.hid IS NULL つまり、野球が趣味な人をLEFT JOIN して合致しない人を抽出する
- yambejp
- ベストアンサー率51% (3827/7415)
>趣味が「野球」だけ これは「趣味の中に野球がある人」という意味でしょうか? それとも「趣味が野球しかない人」(サッカーやテニスは趣味ではない) という意味でしょうか? それによってだいぶ処理がことなります。 かりに後者だとするとこんなフローです SELECT uid FROM 趣味 WHERE hno=1 AND uid IN ( SELECT uid FROM 趣味 GROUP BY uid HAVING count(*)=1 )
- dell_OK
- ベストアンサー率13% (766/5722)
こんな感じになるのかな。 SELECT ユーザ.user_name FROM ユーザ, 趣味, 趣味マスタ WHERE ユーザ.uid = 趣味.uid AND 趣味.hno = 趣味マスタ.hno AND 趣味マスタ.hobby_name = '野球'
補足
すいません、間違えてました・・・ 「趣味に野球がない人」だけを抽出したいんでした・・・。 申し訳御座いません。