• ベストアンサー

一致するデータのみ削除したい

下記のような2つのテーブルがあり、 仕入れテーブルから、2014/1/2にBさんが仕入れたデータを 削除したいのですが、SQLが分かりません。 どのようなSQLにすると実現することができるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • byDesign
  • ベストアンサー率75% (45/60)
回答No.5

delete 仕入れテーブル where (商品,規格) in (select 商品,規格 from 商品テーブル where 担当 = 'Bさん')

ekekojr
質問者

お礼

ありがとうございます!!!!

その他の回答 (5)

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

問題は「コーラ」が「コカ・コーラ」と同値かどうかです それによって書き方がだいぶ違います

ekekojr
質問者

お礼

あ!それまちがいです。 商品名には同一値が入ります。 質問が適切でなかったです。すみません。

  • Saturn5
  • ベストアンサー率45% (2270/4952)
回答No.4

重要なことは担当フィールドの無い仕入れテーブルから担当をどうやって 判断するかです。 規格と数量の組み合わせで担当者が1意に限定できるのならば、それで結合した ビューを作ればいいのです。それならば簡単に削除できます 逆に、1意に限定できなければ1つずつ手作業でやるしかありません。

ekekojr
質問者

お礼

ありがとうございます。

noname#217196
noname#217196
回答No.3

where句をとりあえずは、勉強して、SELECT, DELETEとの組み合わせ例を読むといいと思うよ。 外部結合とか内部結合は時間をかけて理解するほうがいいけど、テーブル数が極端に少ないときはあんまり必要なさそうな。

ekekojr
質問者

お礼

回答ありがとうございます。 SQL難しいです。がんばって勉強してみます

noname#217196
noname#217196
回答No.2

担当者テーブルからは、お茶以外はBさんが担当とわかるので、仕入れテーブルから、当該日付、かつ、お茶じゃないレコードを抽出できれば、それらのレコードを削除できるよ。 ほかの考え方としては、担当者テーブルからBさん担当の商品種別名と、仕入れテーブルの商品名と部分一致するレコードを抽出して、削除。 MySQLの本かなんかで、SELECT, DELETEについて目を通せば参考になるよ。テーブル名、フィールド名、フィールドのデータ型に注意。

ekekojr
質問者

お礼

回答ありがとうございます。 ループでぐるぐる回せば、削除できるんですが SQLで一括で削除したいのです。

  • Saturn5
  • ベストアンサー率45% (2270/4952)
回答No.1

DB設計がダメです。 仕入れテーブルには担当者のフィールドが必要です。 現状のDBでは、商品フィールドと企画フィールドから推測するしかありません。 もし、商品と企画の2つでデータを一意に限定できるものでしたら、delete文の where 式に2つのフィールドについて条件を書けばいいのです。

ekekojr
質問者

お礼

回答ありがとうございます。 DB設計が変えられないので難儀しております。 in句などを使ってできないでしょうか。。

関連するQ&A