• ベストアンサー

GROUP BYを使うのでしょうか?SQL文がわかりません。

以下のようなテーブルで、B社を担当していない人を検索したいのですが、 どのようなSQL文を書けばよいのでしょうか? 氏名 担当会社 -------------- 山田 A社 山田 B社 山田 C社 野村 A社 野村 C社 町田 A社 町田 B社 町田 C社 期待する結果 ----------- 野村 教えて下さい。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • timber
  • ベストアンサー率29% (218/739)
回答No.1

select distinct 氏名 from テーブル where 氏名 not in ( select distinct 氏名 from テーブル where 担当会社='B社'); select distinct 氏名 from テーブル minus select distinct 氏名 from テーブル where 担当会社='B社'; どちらでも取れると思います。

その他の回答 (2)

noname#4564
noname#4564
回答No.3

  > Group By、Havingを使った場合のSQLはどんなものなのでしょうか not exists 、または、minus を使用する方法ではダメな理由を第三者が納得できるように 簡潔かつ客観的に説明してください。 (的確な状況説明ができないなら、求める解決を得るのはむずかしいと思います)  

pikodon
質問者

補足

not exists等を使用する方法がダメな理由はありません。 ただ、以下のようにあったので、Group Byで取得する方法に、 興味があっただけです。 >パフォーマンスがどうであれ、期待するレコードさえ返ればよい、という >のであれば、Group By、Havingでも同じ結果セットは得られますし、 >Left Join でもいけそう。  

noname#4564
noname#4564
回答No.2

  > 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 でもいけそう。  

pikodon
質問者

補足

Group By、Havingを使った場合のSQLはどんなものなのでしょうか