- ベストアンサー
一致するデータのみ削除したい
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
delete 仕入れテーブル where (商品,規格) in (select 商品,規格 from 商品テーブル where 担当 = 'Bさん')
その他の回答 (5)
- yambejp
- ベストアンサー率51% (3827/7415)
問題は「コーラ」が「コカ・コーラ」と同値かどうかです それによって書き方がだいぶ違います
お礼
あ!それまちがいです。 商品名には同一値が入ります。 質問が適切でなかったです。すみません。
- Saturn5
- ベストアンサー率45% (2270/4952)
重要なことは担当フィールドの無い仕入れテーブルから担当をどうやって 判断するかです。 規格と数量の組み合わせで担当者が1意に限定できるのならば、それで結合した ビューを作ればいいのです。それならば簡単に削除できます 逆に、1意に限定できなければ1つずつ手作業でやるしかありません。
お礼
ありがとうございます。
where句をとりあえずは、勉強して、SELECT, DELETEとの組み合わせ例を読むといいと思うよ。 外部結合とか内部結合は時間をかけて理解するほうがいいけど、テーブル数が極端に少ないときはあんまり必要なさそうな。
お礼
回答ありがとうございます。 SQL難しいです。がんばって勉強してみます
担当者テーブルからは、お茶以外はBさんが担当とわかるので、仕入れテーブルから、当該日付、かつ、お茶じゃないレコードを抽出できれば、それらのレコードを削除できるよ。 ほかの考え方としては、担当者テーブルからBさん担当の商品種別名と、仕入れテーブルの商品名と部分一致するレコードを抽出して、削除。 MySQLの本かなんかで、SELECT, DELETEについて目を通せば参考になるよ。テーブル名、フィールド名、フィールドのデータ型に注意。
お礼
回答ありがとうございます。 ループでぐるぐる回せば、削除できるんですが SQLで一括で削除したいのです。
- Saturn5
- ベストアンサー率45% (2270/4952)
DB設計がダメです。 仕入れテーブルには担当者のフィールドが必要です。 現状のDBでは、商品フィールドと企画フィールドから推測するしかありません。 もし、商品と企画の2つでデータを一意に限定できるものでしたら、delete文の where 式に2つのフィールドについて条件を書けばいいのです。
お礼
回答ありがとうございます。 DB設計が変えられないので難儀しております。 in句などを使ってできないでしょうか。。
お礼
ありがとうございます!!!!