アプリ版:「スタンプのみでお礼する」機能のリリースについて

MYSQLのDELETE構文について

phpmyadmin上でDELETE構文を使ってデータを一括削除したいと思っています。

このようなテーブルレコードがあります。

テーブル名 : officeinfo

ID  name  address  post_date
1  A会社   東京   1130128000
2  B会社   大阪   1130129111
3  C会社   東京   1130132000
4  D会社   東京   1130132568

条件
・addressが東京
・post_dateが1130132000より前(1130132000も含む)

この条件に当てはまるデータを全て削除したいのですが、この場合どのようなSQLを書けばいいのでしょうか?

ためしに下記をやってみましたがエラーになってしまいました。

DELETE * FROM `officeinfo` WHERE `post_date`<=1130132000 and `address`=東京;

#1064 - You have an error in your SQL syntax

次に下記を試しましたが同じエラーになってしまいました。

DELETE FROM officeinfo
WHERE `address`=東京 ORDER BY `ID` LIMIT 2;

どのように直したらいいのでしょうか?

A 回答 (2件)

delete文の構文は、


「delete from 表名 [where 検索条件]」
です。

MySQLの仕様として、、、
予約語と同じ表名、列名等を使用する場合は、「`」(バッククォート)で囲む必要があります。

例)delete from `table`

また、文字定数は、「'」(アポストロフィー)で囲む必要があります。(「"」で囲んでもよい)

例)select * from t1 where c1='東京'

また、文字形式の数字は、自動的に数字にキャストされます。

例)123は'123'、'456'は456と、MySQLが自動的にキャストする。

したがって、今回のケースでは、以下のようなSQLになります。

DELETE FROM `officeinfo`
WHERE `post_date`<=1130132000 and `address`='東京';

=====参考=====
標準SQLでは、表名や列名が予約語と同じ場合は、「"」で囲むことになっています。MySQLでは、ANSIモードでは標準SQLと同じですが、それ以外では、「`」(バッククォート)で囲みます。

文字定数を、「'」(アポストロフィー)で囲むのは、一般的な仕様です。「"」で囲んでも等価というのは、拡張仕様だと思います。

文字形式のデータ型でも数値を指定すれば、数値のデータ型にキャストするというのは、MySQLの拡張仕様です。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

お礼日時:2007/03/31 00:46

引用符でくくっている場所が違います。



検索条件をくくってください。'address'=東京では、フィールドをくくっています。

delete from officeinfo where address='東京' and post_date <= '1130132000';

ですね。
    • good
    • 0
この回答へのお礼

うまくいきました。
どうもありがとうございました。

お礼日時:2007/03/31 00:46

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