人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQL5の質問です。

table_a
id
title
honbun

以上のようなテーブルがあります。
ここからtitleが同じものを削除したいと思います。3つ同じものがあれば1つだけ残します。

手元のオライリーSQLクックブックによると

delete from table_a
where id not in(select min(id) from talbe_a group by title)

これで出来るはずなんですけど、エラーが。

(省略)for update in FROM clause

調べてみると
http://dev.mysql.com/doc/refman/4.1/ja/subquery-errors.html
ここの一番下です。同じテーブル名を使ってはダメらしいのです。

table as A と名前を付ければいいのかな、と試したのですがこれもダメ。

どうすればいいのでしょうか。お願いします。

●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード:AS DELETE GROUP SELECT SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ●
●35ポイント

マニュアルにあるように出来ないことは出来ませんので、別方法で回避してみてはいかがでしょう。

一時表を作成し、その一時表とのサブクエリを利用して行を削除します。

create temporary table tmp_uniq_id as select min(id) as min_id from table_a group by title;
delete from table_a where id not in (select min_id from tmp_uniq_id );

2 ● yoccola
●35ポイント

delete from table_a

where id not in(select min(id) from talbe_a group by title)

本題とずれますが、サブクエリー中のテーブル名が“talbe_a”になっていますよ。

下記のようにそれぞれのテーブルにasで別名をつけてみてはいかがでしょうか?

delete from table_a as a

where id not in(select min(id) from table_a as b group by title)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ