• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの書き方)

SQLで特定の検査種別のスタッフを抽出する方法

このQ&Aのポイント
  • VB.Netを使用して、当事業所の健康診断管理を行いたいと考えています。特定の検査種別『C』のみのスタッフを抽出するためのSQL文を教えてください。
  • DBには社員ID、名前、検査種別のフィールドがあり、検査種別『C』のみのスタッフを抽出したいです。
  • 独学で勉強しているため、処理方法がわかりません。遠回りな処理でも構いませんが、なるべく効率的な方法を教えていただければと思います。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

Alsharkさん こんにちは。   下記のSQLでできるかと思います。 ※確認はAccessで行いました。   SELECT * FROM T検査 WHERE 社員ID NOT IN  (SELECT Distinct 社員ID FROM T検査 WHERE 検査種別<>"C");   お試しください。

Alshark
質問者

お礼

ありがとうございます。 無駄が無く、美しく処理動作しました。 いかんせん独学&素人なのでサブクエリの概念が中々難しいです。 でもサブクエリの効果が絶大なので頑張って勉強してみます。 (今まではクエリ→配列代入→クエリ→配列代入→…と処理させてました(汗))

その他の回答 (3)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.4

他にもnot existsを使って select 社員ID,名前,検査種別 from テーブル as a where 検査種別 = 'C' and not exists ( select * from テーブル as b where a.社員ID = b.社員ID and b.検査種別 <> 'C'); としてもよさそうです。

Alshark
質問者

お礼

ありがとうございます。 色々な方法があり、勉強になります。

  • Tom-3
  • ベストアンサー率32% (42/130)
回答No.3

テーブル名は「検査種別」としました。 私ならば下記のように記述します。 SELECT   A.社員ID  ,A.名前  ,A.検査種別  ,B.社員ID FROM dbo.検査種別 AS A LEFT JOIN (       SELECT BA1.社員ID       FROM dbo.検査種別 AS BA1       WHERE 検査種別<>'C'       ) AS B ON A.社員ID=B.社員ID WHERE A.検査種別='C'  AND ISNULL(B.社員ID,'')='' 見やすくするために前方の空白を全角スペースにしています。 使用される際は全角スペースを半角スペースに変更してください。

Alshark
質問者

お礼

ありがとうございます。 SQL・DB素人なので大変勉強になりました

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

テーブル名が示されてませんが「検査スタッフ」テーブルとします。 select T1.社員ID, T1.名前, T1.検査種別 from 検査スタッフ as T1, (select 社員ID, count(*) as 検査種別数 from 検査スタッフ group by 社員ID) as Ta, (select 社員ID from 検査スタッフ where 検査種別 = 'C') as Tb where T1.社員ID = Ta.社員ID AND Ta.社員ID = Tb.社員ID AND Ta.検査種別数 = 1 ; うーん、なんか美しくない。

Alshark
質問者

お礼

ありがとうございます。 私自身、独学作成コードばかりなので力技的なプログラムが多く 後で見返すのがいやになるものが多いです(笑) SQLは身に付けると大変役立つので是非習得したいと思います。