- 締切済み
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にデータがある方だけに送るのは簡単ですが、データがない方だけに送るケースが判らずに質問させて頂きました。 色々と試行錯誤しているのですが、どれも上手くいかなくて・・・ お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。 宜しくお願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
ユーザーテーブルとメールマガジンテーブルを別々に設定し ユーザー=メールマガジンテーブルで管理すればいいでしょう。 たとえば、ユーザー=鈴木・佐藤・山田がいて、 メールマガジン=趣味、仕事、自己啓発があったときに 趣味は全員、仕事は鈴木・佐藤、自己啓発は佐藤だけ登録している場合 こんな感じ 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)
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) このような感じで。