プロが教えるわが家の防犯対策術!

お世話になっております。
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にデータがある方だけに送るのは簡単ですが、データがない方だけに送るケースが判らずに質問させて頂きました。
色々と試行錯誤しているのですが、どれも上手くいかなくて・・・


お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。
宜しくお願い申し上げます。

A 回答 (2件)

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)

このような感じで。
    • good
    • 0

ユーザーテーブルとメールマガジンテーブルを別々に設定し


ユーザー=メールマガジンテーブルで管理すればいいでしょう。

たとえば、ユーザー=鈴木・佐藤・山田がいて、
メールマガジン=趣味、仕事、自己啓発があったときに
趣味は全員、仕事は鈴木・佐藤、自己啓発は佐藤だけ登録している場合
こんな感じ

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を抽出して処理すればよいでしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!