• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数の期間にマッチする人の抽出方法)

複数の期間にマッチする人の抽出方法

このQ&Aのポイント
  • 2008年10月1日から10月31日までの期間中に働かなかった人で尚且つ2008年12月1日から12月15日の間に1回でも働いた人を抜き出す方法について知りたい。
  • shiftテーブルとmemberテーブルを使って、2008年10月1日から10月31日までの期間に働かなかった人と、2008年12月1日から12月15日の間に1回でも働いた人を抽出する方法を教えてください。
  • 初心者ですが、shiftテーブルとmemberテーブルを結合して、2008年10月1日から10月31日までの期間中に働かなかった人で、2008年12月1日から12月15日の間に1回でも働いた人を取得する方法について教えてください。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

#1で申し上げた通りでいけそうですね。 今回の例であれば具体的にはこんな感じ SELECT member.code,member.name FROM member LEFT JOIN ( SELECT DISTINCT code FROM shift WHERE shift_day BETWEEN '2008-10-01' AND '2008-10-31' ) AS X10 ON X10.code=member.code LEFT JOIN ( SELECT DISTINCT code FROM shift WHERE shift_day BETWEEN '2008-12-01' AND '2008-12-31' ) AS X12 ON X12.code=member.code WHERE X10.code IS NULL AND X12.code IS NOT NULL;

nicolemen
質問者

お礼

ありがとうございます。 早速実行しました。期待通りの結果が得られました。 本当にありがとうございます。 感謝いたします。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ユーザーテーブルにDISTINCTした12月に働いたデータをLEFT JOINし さらにDISTINCTした10月に働いたデータをLEFT JOINして、 10月分はNULLを検出すればいけそうです。 もうすこし具体的な例を記述いただければ、SQL文もかけるかもしれません すくなくともMySQLのバージョンくらいかいたてください

nicolemen
質問者

補足

早速ご返事ありがとうございます。 言葉が足りず失礼しました。 MySQL クライアントのバージョン: 4.1.22 です。 具体的には、 テーブル[shift] NO shift_day shift_time code 1 | 10-01 | 10:00 | 131 2 | 10-03 | 10:30 | 131 3 | 10-03 | 10:00 | 135 4 | 10-05 | 10:00 | 131 ・ ・ ・ 25 | 12-02 | 10:00 | 131 26 | 12-02 | 10:00 | 128 27 | 12-04 | 10:30 | 131 テーブル[member] code name 128 yamada 131 watanabe 135 tanaka 138 satou このようなテーブルがあったとします。 この中でテーブルshiftの中から10月には一度も仕事をしなかったけれど、12月には仕事をしている人を探せるようにしたいと思っています。 上にデータからでは、128のyamada がヒットするようにしたいと思います。 どうぞよろしくお願いします。