PostgreSQLのphpPgAdminを使ってデータを削除する際のエラーの原因と解決方法

このQ&Aのポイント
  • PostgreSQLのphpPgAdminを使ってデータを削除しようとする際にエラーが発生している場合、SQL文の文法エラーが原因である可能性があります。
  • エラーメッセージから推測すると、SQL文のDELETE句の書式が正しくないためにエラーが発生している可能性が高いです。
  • 具体的には、削除対象のカラム名をDELETE句内でカンマ区切りで指定していることが問題で、正しい書式はDELETE FROM テーブル名 WHERE 条件です。
回答を見る
  • ベストアンサー

PostgreSQLのphpPgAdminを使って

お世話になります。 PostgreSQL8.4.8のphpPgAdmin3.5.3を使ってデータを削除する際に 先ずデータをSELECT で表示させて確認後、 SQL編集 で SELECTを DELETE に書き換えて実行しましたが以下エラーが出ます ≪一覧確認用≫一覧表示はできました。 SELECT "kaiin_no","tenpo_no","tenpo_name" FROM "public"."store_table" WHERE "kaiin_no" IN ('1234',2222'); ≪削除用≫SELECT  → DELETEに変更 → 実行 → 以下エラー DELETE "kaiin_no","tenpo_no","tenpo_name" FROM "public"."store_table" WHERE "kaiin_no" IN ('1234',2222'); ≪エラー内容≫ ERROR: syntax error at or near "," LINE 1: SELECT COUNT(*) AS total FROM (DELETE "kaiin_no","tenpo_no",... ^ 文: SELECT COUNT(*) AS total FROM (DELETE "kaiin_no","tenpo_no","tenpo_name" FROM "public"."store_table" WHERE "kaiin_no" IN ('1234','2222')) AS sub 文法エラーのようなのですが 一覧が出来ているのに なぜ削除が出来ないのか 初心者で恐縮ですが ご教示頂ければ幸いです。

  • ya-ya-
  • お礼率42% (110/256)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

DELETEの書き方は下記の方法ですので間違えないで下さい。 DELETE FROM [ ONLY ] table [ WHERE condition ]

ya-ya-
質問者

お礼

早々の御返信 ありがとうございます。 再度ログインして ご教示頂いた通り設定しましたら うまく削除できました! カラム名等の「 " 」は、いらなかったようです。 ありがとうございます!!

関連するQ&A

  • PostgreSQLのUPDATE文につきまして

    お世話になります。 phpPgAdminで更新作業をしていまして 一件一項目の更新で update "store_table" set "tenpo_add" = '東京都1-1-1' where "kaiin_no" = '123456'; とした場合はうまく更新でできたのですが、以下のように複数項目の更新が文法エラーになります。 update "store_table" set "tenpo_post1","tenpo_post2","tenpo_add" = '123','4321','東京都1-1-1' where "kaiin_no" = '123456'; このようにした場合、  "," ←この部分が文法上おかしいとのエラーが出ました。 どのように記載すれば良いかご指導いただければ幸いでございます。。

  • phpPgAdminを使ってデータの更新

    PostgreSQLのphpPgAdminを使ってデータの更新をしようと思うのですが 特定の kaiin_no を選んで その t_tiket の値を '取扱っている' に更新したいのですが 文法エラーが出ます。 文: update "store_table" set "t_tiket" = '取扱っている' where "kaiin_no" = ('100','101','103'); SQL エラー: ERROR: operator does not exist: character = record LINE 1: ...t_tiket" = '取扱っている' where "kaiin_no" = ('100... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. phpPgAdmin では、= や ( ) 、" の使い方に特徴があるようなのです。 WHERE kaiin_no IN ('100','101','103'); とすべきなのでしょうか? ご存知の方がいらっしゃればご教示くださいませ。

  • 特定カラムの値を変更したいのですが

    お世話になります。DB初心者です。 現在 、PostgreSQLのphpPgAdminを使っていまして 以下のようなDBがあり kaiin_no  t_name   t_chiket -------+-------+---------- 1001    太郎     なし 1002    次郎     なし 1003    三郎     なし 1004    四朗     あり 1005    五朗     あり 以下のようなSQLで目的のデータを表示できるのは解ったのですが SELECT "kaiin_no","t_name","t_chiket" FROM "public"."store_table" WHERE "kaiin_no" IN ('1001','1002','1003'); kaiin_no '1001','1002','1003' の t_chiket を 「なし」 から 「あり」 に変更すする方法をご教授いただけますでしょうか? お手数をおかけしますがよろしくお願いいたします。

  • 重複チェックの記述でご教授くださいませ。

    日頃はデザイン関連の作業担当なのですが、、、、 データの重複チェック方法で  会員番号と店舗番号を入力するのですが 登録画面には //会員番号重複チェック if(Duplication_Check2("store_table","'".$kaiin_no."'",$tenpo_no)){ $err .= "会員NO「".$kaiin_no."」で店舗NO「".$tenpo_no."」は既に登録されています。<br />"; } としてまして、重複のエラー表示をさせています。 重複チェックの関数定義では //重複チェック2 function Duplication_Check2($kaiin_no,$tenpo_no){ global $db; $sql = "select * from store_table where kaiin_no='".$kaiin_no."' and tenpo_no=".$tenpo_no; $rst = pg_query($db,$sql); if($rst){ if(pg_num_rows($rst) = 0){ return true; }else{ return false; } }else{ return false; } } としたのですが ここに文法エラーが出ます。 初心者の質問で恐縮なのですがどこをどうすればいいのでしょうか? ご教授いただければ幸いです。

  • DELETEの操作で (PostgreSQL)

    linux postgresql 8.4 で1行DELETEしたいのですが select * from table_a where a_key = 1400; で1件検索できても delete from table_a where a_key = 1400 returning *; としてもレコードが表示されません。 原因の調べ方を教えてもらえないでしょうか? よろしくお願いします。

  • PostgreSQLの「*」について・・?

    こんにちわ, 今PostgreSQLを勉強しています。 たとえば, SELECT * FROM table where field ~ 'a'; とすると,tableテーブルからfieldに「a」が入っている項目を抜き出す,となります。 これに SELECT * FROM table where field LIKE '*a'; とすると,エラーが出てしまいます。 *(ワイルドカード)の使用はどのようなときに使用するのでしょうか。PostgreではLinuxとは違う使用をすると書いてあったのですが,よくわかりません。 よろしくおねがいします。

  • 複数フィールドの条件について

    SQL文について教えてください。 oracle,mysqlでは、下記の条件分 where (fieldA,fieldB) in (select fieldA,fieldB from TABLE_NAME) と言った条件を記載可能なのですが、SQLServer ではエラーになってしまいます。 違った構文があるのでしょうか?よろしくお願いします。 具体的にやっているSQLは update TABLE_NAME set FIELD_NAME='1' where (FIELDA,FIELDB) in (select FIELDA,FIELDB from TABLE_NAME2 where FIELDC='1')

  • 複雑なcountについて

    val | num ----------- 9984 | 1 1234 | 1 9876 | 1 4567 | 1 9984 | 1 1234 | 1 9984 | 1 以上のようなテーブルで SELECT COUNT(*) FROM table_name WHERE val = 9984 SELECT COUNT(*) FROM table_name WHERE val = 1234 SELECT COUNT(*) FROM table_name WHERE val = 9876 SELECT COUNT(*) FROM table_name WHERE val = 4567 のように4つ実行することなく1度に 9984 => 3 1234 => 2 9876 => 1 4567 => 1 という結果を得たいのですが方法はありますでしょうか? ご教示お願いいたします。

  • SQLについて

    こんにちは、honiyonです。  良い質問タイトルが思いつきませんでした...(^^;  2つのテーブルがあります。(仮定です)   ・オーナーの情報テーブル(owner)   ・オーナーの車の情報テーブル(car)  この2つのテーブルを利用して「男性の人で、黒い車に乗ってる人の車種名」を検索しようとしました。  これを1つのSQLで   SELECT car.name FROM owner,car WHERE (owner.no=car.ownerno) and (car.color='black') and (owner.sex='MAN');  とか、   SELECT car.name FROM (SELECT * FROM owner WHERE (owner.sex='MAN')) AS O2, (SELECT * FROM car WHERE (car.color='black')) AS C2 WHERE (owner.no=car.ownerno);  とかやってみましたが、涙が出るほど遅いです。  しかし   SELECT * INTO TABLE owner_tmp FROM (SELECT * FROM owner WHERE owner.sex='MAN'); SELECT * INTO TABLE car_tmp FROM (SELECT * FROM car WHERE car.color='black'); SELECT car_tmp.name FROM (owner_tmp.no=car_tmp.ownerno);  とすると超高速です。  なんとかテンポラリを作らず、出来れば1つのSQL文で高速に冒頭の処理を行いたいのですが、良い方法はないでしょうか。 是非お知恵を貸してください。  宜しくお願いします(.. #データベースはPostgreSQL 7.2.3です。

  • SQLのSELECT文の集計方法について

    SQLのSELECT文についての質問です。 各店舗ごとの利用数を集計したいです。 自分なりに考えて作ってみました。 結果は期待通りなのですが.... このような場合 みなさんだったら、どのようにするのでしょうか? よろしくお願いします。 【店舗テーブル】 TENPO_CD  TENPO_NAME 1      ホテル1 2      ホテル2 3      ホテル3 4      ホテル4 5      ホテル5 【利用テーブル】 ID TENPO_CD 1  1 2  1   3  2 4  3 5  1 ・ ・ 【希望結果】 1 ホテル1  3 2 ホテル2  1 3 ホテル3  1 4 ホテル4  0 5 ホテル5  0 select a.tenpo_cd,a.tenpo_name,c.cnt from 店舗テーブル as a left join ( select 利用テーブル.tenpo_cd,count(利用テーブル.tenpo_cd) as cnt from 利用テーブル group by 利用テーブル.tenpo_cd ) as c on a.tenpo_cd = c.tenpo_cd where order by a.tenpo_cd