- ベストアンサー
GROUP BYを使うのでしょうか?SQL文がわかりません。
以下のようなテーブルで、B社を担当していない人を検索したいのですが、 どのようなSQL文を書けばよいのでしょうか? 氏名 担当会社 -------------- 山田 A社 山田 B社 山田 C社 野村 A社 野村 C社 町田 A社 町田 B社 町田 C社 期待する結果 ----------- 野村 教えて下さい。 どうぞよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
select distinct 氏名 from テーブル where 氏名 not in ( select distinct 氏名 from テーブル where 担当会社='B社'); select distinct 氏名 from テーブル minus select distinct 氏名 from テーブル where 担当会社='B社'; どちらでも取れると思います。
その他の回答 (2)
> Group By、Havingを使った場合のSQLはどんなものなのでしょうか not exists 、または、minus を使用する方法ではダメな理由を第三者が納得できるように 簡潔かつ客観的に説明してください。 (的確な状況説明ができないなら、求める解決を得るのはむずかしいと思います)
> select distinct 氏名 from テーブル where 氏名 not in ( > select distinct 氏名 from テーブル where 担当会社='B社'); not in よりは not exists の方がよいでしょう。 > select distinct 氏名 from テーブル > minus > select distinct 氏名 from テーブル where 担当会社='B社'; Oracle (9i以上?) 以外では使えません。 パフォーマンスがどうであれ、期待するレコードさえ返ればよい、という のであれば、Group By、Havingでも同じ結果セットは得られますし、 Left Join でもいけそう。
補足
Group By、Havingを使った場合のSQLはどんなものなのでしょうか
補足
not exists等を使用する方法がダメな理由はありません。 ただ、以下のようにあったので、Group Byで取得する方法に、 興味があっただけです。 >パフォーマンスがどうであれ、期待するレコードさえ返ればよい、という >のであれば、Group By、Havingでも同じ結果セットは得られますし、 >Left Join でもいけそう。