dポイントプレゼントキャンペーン実施中!

お世話になります。

Linuxを使ってMySQLのレコードが追加された時に自動で処理をする
スクリプトを作っています。
データベースはtestで、
データベースのフィールドは、name=varchar(16),
password=varchar(16),date=TIMESTAMP, number=int AUTO_INCREMENT となっています。
データを一個ずつ処理したいので、
select Name from test WHERE number=(select MIN(number) from test) としてみた所、上手く希望のデータが取り出せたので、
今度は用がなくなったデータを削除する為に、
delete from test WHERE number=(select MIN(number) from test)
としてみたところ、
You can't specify target table 'test' for update in FROM clause
と出て、エラーになりました。
エラー内容はサブクエリの結果が変わるようなクエリは発行できないと
言う感じでした。

上手く処理をする方法を思いついたと思ったのですが、このようになって、
どうしたものかと途方に暮れています。
上手く処理をする方法をご存知の方が居られましたら是非御教授いただきたくお願いします。

A 回答 (2件)

確かに、こちらの環境でもできないですね。


 ちょっと~、、って感じですが・・・・
参考URLで確認してみると、サブクエリでUpdate,Delete
では同じテーブルを使えないと出ています。
何でなのでしょうか?ね?

Mysql特有の構文になりますが、Limitで対応できると思います。
delete from test order by number limit 1;
これでいけると思います。

参考URL:http://dev.mysql.com/doc/refman/4.1/ja/subquery- …
    • good
    • 0
この回答へのお礼

ありがとうございます。

この方法で期待した動作をしました。
ありがとうございます。

お礼日時:2006/11/24 18:42

SQLをわけていいなら変数をつかって



SELECT @MIN_NUM:=MIN(number) FROM test;
DELETE FROM test WHERE number=@MIN_NUM;
    • good
    • 0
この回答へのお礼

ありがとうございます。
分けても上手く処理できるとは思いますが、Linuxのシェルで
一括処理ということで、当方全くシェルを使ったことがない
ので、難しい問題を呼びそうなのでできれば分割したくないです。

お礼日時:2006/11/24 18:39

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