• 締切済み

WHERE文に関して

お世話になっております。 WHERE文に関して、少々分からない事が出てきたため質問させて下さい。 id mail name ・・・・ 現在、上記のようなカラムを持つmemberというテーブルがあり、このテーブルにあるメンバー向けにメールマガジンを配信しております。 今回、メールマガジンの配信の停止を求められたのですが、色々なタイプのメールマガジンを配信しており、その1つだけを停止を求められたので配信停止依頼のあった者だけを no no_id no_mail といったようなテーブル(no_magazine)を設置し、配信の停止を求めてきた方のidと、mailを、上記テーブルに登録する流れを考えました。 そこで質問です。 配信停止を求めてきた方だけを、no_magazineテーブルに入れ、memberとno_magazineをLEFT JOINして問合わせを考えておりますが、このように、no_magazineにデータがない方だけに配信をしようとした場合、どのようなWHERE文になるのでしょうか? no_magazineにデータがある方だけに送るのは簡単ですが、データがない方だけに送るケースが判らずに質問させて頂きました。 色々と試行錯誤しているのですが、どれも上手くいかなくて・・・ お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。 宜しくお願い申し上げます。

みんなの回答

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

ユーザーテーブルとメールマガジンテーブルを別々に設定し ユーザー=メールマガジンテーブルで管理すればいいでしょう。 たとえば、ユーザー=鈴木・佐藤・山田がいて、 メールマガジン=趣味、仕事、自己啓発があったときに 趣味は全員、仕事は鈴木・佐藤、自己啓発は佐藤だけ登録している場合 こんな感じ create table user (uid int,uname varchar(20)); insert into user values(1,'鈴木'),(2,'佐藤'),(3,'山田'); create table mailmagazin (mid int,mname varchar(20)); insert into mailmagazin values(1,'趣味'),(2,'仕事'),(3,'自己啓発'); create table user_mailmagazin (mid int,uid int,unique(mid,uid)); insert into user_mailmagazin values(1,1),(1,2),(1,3),(2,1),(2,2),(3,2); これを、ユーザーごと、メールマガジンごとに表示するとこう //ユーザーごと select u.uid,uname,group_concat(mname) from user as u ,user_mailmagazin as um ,mailmagazin as m where u.uid=um.uid and um.mid=m.mid group by uid; //メールマガジンごと select m.mid,mname,group_concat(uname) from user as u ,user_mailmagazin as um ,mailmagazin as m where u.uid=um.uid and um.mid=m.mid group by mid; あとはたとえば仕事(mid=2)のメールマガジンだけ送るなら select u.uid,uname from user as u ,user_mailmagazin as um where u.uid=um.uid and um.mid=2; のような検索でuidを抽出して処理すればよいでしょう

  • don9don9
  • ベストアンサー率47% (299/624)
回答No.1

NOT EXISTSを使えばよいのでは? SELECT * FROM member WHERE NOT EXISTS(SELECT * FROM no_magazine WHERE no_magazine.no_id = member.id AND no_magazine.no_mail = member.mail) このような感じで。

関連するQ&A