我が家のお雑煮スタイル、教えて下さい

お世話になっております。
最近MYSQLをはじめた初心者です。
一括して削除を行いたいのですが、どうしても上手くいかないのでご教授いただければと思います。

『products』というテーブルがあり、その中身を更新していくために、
毎日更新用のcsvファイルが送られてきます。
そのcsvファイルを一度更新用のテーブル『up_products』にロードし、
その更新用csvの中身と一致したものを、テーブル『products』から一括して削除したいと考えております。

更新用ファイルには以下の項目があります。

pos_code(ポスコード)、hinban(品番)、title(タイトル) etc…

この「pos_code」と「hinban」が一致するものを削除したいのです。

いろいろなサイトで調べ、下記のようなSQL文で試みたのですが、ダメでした。。。

delete from products where pos,hinban = any (select pos,hinmoku from up_products);

また、この上記方法ですが、更新用テーブルを使用すれば上手くいくかな?と、
自分が判断したもので、単にcsvファイルをテーブル『products』に
load data infile~
のようにロードすることで、「pos_code」と「hinban」に一致したものを
一括して削除する方法があるのでしたら、あわせてご教示いただければと思います。

わかりづらい説明で恐れ入りますが、何卒よろしくお願い致します。

A 回答 (1件)

MySQLのバージョンは、何でしょうか?



更新用ファイルには以下の項目があります。

>pos_code(ポスコード)、hinban(品番)、title(タイトル) etc…
>この「pos_code」と「hinban」が一致するものを削除したいのです。
>いろいろなサイトで調べ、下記のようなSQL文で試みたのですが、ダメでした。。。
>delete from products
> where pos,hinban = any (select pos,hinmoku from up_products);

SQLの構文として正しくありません。

where (pos,hinban) = any (select pos,hinmoku from up_products)

という書き方なら、構文として正しいです。ただ、列名はposでなくpos_codeでは?

(1)existsを使う・・・MySQL 4.1以降
delete from tbl1
where exists(select * from up_tbl1
where tbl1.key1=key1 and tbl1.key2=key2);

(2)他表を参照したり、複数表の削除も可能なMySQLの機能を使う
delete tbl1 from tbl1,up_tbl1
where tbl1.key1=up_tbl1.key1 and tbl1.key2=up_tbl1.key2;

※この例では、削除対象はtbl1だけです。この辺はMySQLの独自機能が多いようです。
http://dev.mysql.com/doc/refman/4.1/ja/delete.html

「where tbl1.key1=key1 and tbl1.key2=key2」の条件式は、
「where (tbl1.key1,tbl1.key2)=(key1,key2)」といった書き方もできます。
これは、行値構成子(行値式)という書き方で、SQL-92(?)で規定され、SQL Server以外の主要なRDBMSでは実装されています。
    • good
    • 0
この回答へのお礼

chukenkenkouさま

ご回答ありがとうございます!
現在使用しておりますバージョンは『4.0.14』になります。

>(2)他表を参照したり、複数表の削除も可能なMySQLの機能を使う
>delete tbl1 from tbl1,up_tbl1
>where tbl1.key1=up_tbl1.key1 and tbl1.key2=up_tbl1.key2;

上記ご教授いただいた構文

delete products from products,up_products
where products.pos_code=up_products.pos_code and products.hinban=up_products.hinban;

を使用することにより、望んでいた結果を得ることができました!

本当にありがとうございました!!
心より感謝しております!!!

お礼日時:2007/11/16 11:33

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


おすすめ情報