匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

MySQL のSQL文のDELETE文の書き方についての質問します。

MySQL5.5を使用しています。

あるテーブルのデータを比較して存在するものを削除したいと考えています。

下記のSELECTは成功するのですが

SELECT * FROM tb1 as T1 WHERE EXISTS (SELECT * FROM tb1 as T2 WHERE T1.id = T2.id AND T1.created < T2.created);

DELETEにするとSQL syntaxエラーとなります。

DELETE * FROM tb1 as T1 WHERE EXISTS (SELECT * FROM tb1 as T2 WHERE T1.id = T2.id AND T1.created < T2.created);

なにか違うのでしょうか?

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2012/12/07 00:28:34
  • 終了:2012/12/14 00:30:03

回答(2件)

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2012/12/07 01:00:21

アスタリスク、要らない。

匿名質問者

質問者から

匿名質問者2012/12/07 13:25:01

申し訳ありません。
アスタリスクがなくてもエラーでした。
下記のSQLとなります。

DELETE FROM tb1 as T1 WHERE EXISTS (SELECT * FROM tb1 as T2 WHERE T1.id = T2.id AND T1.created < T2.created);

匿名回答2号 No.2

匿名回答2号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2012/12/07 05:40:45

DELETE FROM tb1 WHERE EXISTS (SELECT 1 FROM tb1 as T2 WHERE tb1.id = T2.id AND tb1.created < T2.created);

他4件のコメントを見る
匿名回答2号

tb1 のクリエイトテーブル文を 提示してください。

2012/12/10 20:07:06
匿名質問者

下記のようにサブクエリーを回避するSQLにしました。

DELETE FROM tb1 WHERE EXISTS ( SELECT id FROM ( select id from tb1 as T2 WHERE tb1.i_id = T2.i_id AND tb1.created < T2.created) as temp);

テーブルは下記のようになります。

| tb1 | CREATE TABLE `tb1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`c_id` bigint(20) unsigned NOT NULL,
`i_id` bigint(20) unsigned NOT NULL,
`collected` datetime DEFAULT NULL,
`received` datetime DEFAULT NULL,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ix_c` (`c_id`),
KEY `ix_i` (`i_id`),
KEY `ix_ci` (`i_id`,`c_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1348 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+-----------------+

お手数をおかけします。

2012/12/11 10:58:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません