
お世話になっております。
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件)
- 最新から表示
- 回答順に表示
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を抽出して処理すればよいでしょう
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
よか石けんの口コミや評判
-
1テーブル&複数レコードの更新...
-
”photo id” とは何ぞや?
-
クエリ表示と、ADOで抽出したレ...
-
一つ前のレコードの値と減算し...
-
Unionした最後にGROUP BYを追加...
-
select文のwhere句に配列を入れ...
-
「SELECTして取得できない場合...
-
PL/SQLの変数について
-
mysqlのデータから連続する日数...
-
ストアドのエラーについて
-
NOT INをNOT EXISTSで書き直したい
-
ソート順の一番若い者を取得する
-
Updateの複数テーブル条件時のL...
-
INで抽出した順番に並び替え(S...
-
SQLサーバから、項目の属性(型...
-
inner joinをすると数がおかし...
-
ある条件の最大値+1を初番する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
sqlで、600行あるテーブルを100...
-
SQLにて特定の文字を除いた検索...
-
1テーブル&複数レコードの更新...
-
PL/SQLの変数について
-
WordpressのContact form 7でzi...
-
複数テーブルのGROUP BY の使い...
-
バインド変数について
-
inner joinをすると数がおかし...
-
MySQLのint型で001と表示する方...
-
updateを1行ずつ実行したい。
おすすめ情報