• 締切済み

pgAdmin IIIでDELETEするためには・・(初心者です)

pgAdmin IIIで新しいテーブルを作りSQL文の勉強をしているのですが、 DELETE文が実行できません。 ○○というテーブルにある×××という項目が1と2という数値の場合その行を削除するという場合、 DELETE ○○ WHERE ××× IN (1,2) で良いのでしょうか? ○○、×××ともに日本語でテーブルを作っています。 pgAdmin IIIの設定は特にいじっていません。 とりあえずテーブルを作ってSQL文を試したいと思ってやっているので、 DELETE文を実行する権限がないということはあるのでしょうか?

みんなの回答

  • eibici
  • ベストアンサー率0% (0/0)
回答No.4

>まず、最初に表示されるエラーですが、 >ERROR: syntax error at or near "部署コード" at character 26 >です。 >実行している文は、 >DELETE from 学生テーブル WHERE 所属コード IN (1001,1002) >になります。 実行している文は「所属コード」で、エラーには「部署コード」となってます。 実行文とエラーはコピペで、間違いないですか??エラーコードとして ありえないはずなので。。。 あと、××とか○○とかだと、そこの中にエラーの原因あったときにどうにも しようがないので、隠さず全部書いてほしいです。(見たところそれほど機密情報の類ではないので)

回答No.3

#2回答者です。 PostgreSQLのバージョン、OSは何でしょうか? SQL中に「倍角の空白」といったものが、入ったりしていませんか?

回答No.2

>DELETE文が実行できません エラーの内容を、具体的に書きましょう。 実行したSQLも、詳しく書きましょう。 >DELETE ○○ WHERE ××× IN (1,2) delete from 表名 where 列名 in(1,2) >DELETE文を実行する権限がないということはあるのでしょうか? アクセス権限を付与して運用(GRANTで付与、REVOKEで取り消し)している場合は、そういう設定もできます。何も設定していないなら、アクセス権限はチェックされません。 >「ERROR: syntax error at or near "××" 」 構文エラーなので、権限チェック等がされる以前の問題です。 入力したSQLを正確に質問に貼り付ければ、すぐにアドバイスを得られると思いますけど?

moqemoqe
質問者

補足

質問の仕方という初歩的な指摘、ありがとうございます。 まず、最初に表示されるエラーですが、 ERROR: syntax error at or near "部署コード" at character 26 です。 実行している文は、 DELETE from 学生テーブル WHERE 所属コード IN (1001,1002) になります。 所属コードはintです。 まだ解決できていないので引き続き自分でもがんばって見ます。

noname#30334
noname#30334
回答No.1

>DELETE ○○ WHERE ××× IN (1,2) FROMが抜けてますが、書き損じですか? DELETE FROM ○○ WHERE ××× IN (1,2) 後は、×××の型の問題で、 DELETE FROM ○○ WHERE ××× IN ('1','2') かな? DELETEの為だけに何か権限が必要という事は、なかったと思います。

moqemoqe
質問者

お礼

補足にも書いたのですが、 一歩進みました。まだ実行したいことは実現できていませんが… しかし。ありがとうございます!

moqemoqe
質問者

補足

書き損じだったようです。 参考にしている教本には載っていなかったのですが、 syntax errorの表記がテーブル名の○○の部分ではなくなりました。 解決に一歩近づいています。ありがとうございます。 しかしながら「ERROR: syntax error at or near "××" 」のエラーメッセージが出ます。 権限が必要ではないということなので、再チャレンジしたいと思います。

関連するQ&A

  • このようなDELETEはできますか?

    こんにちは。DELETE文の削除条件について教えてください。 例えば下記のような2つのテーブルがあったとします。 ATABLE KEY1(ID) KEY2(DATE) ・・・・・・・・・・ ------------------------------------------------ 100000 2004/09/01 ・・・・・・・・・・ 200000 2004/09/01 ・・・・・・・・・・ 300000 2004/09/01 ・・・・・・・・・・ BTABLE KEY1(ID) KEY2(DATE) CODE ・・・・・・・・・・ ------------------------------------------------ 100000 2004/09/01 0 ・・・・・・・・・・ 200000 2004/09/01 0 ・・・・・・・・・・ 300000 2004/09/01 1 ・・・・・・・・・・ この2つのテーブルで、BTABLEのCODEが1のレコードにKEYで関連付くATABLEのレコードを削除したいのです。 プログラムの中では対応できるのですが、SQL1文で実行させることはできるでしょうか? とりあえず下記のように作ってみました(いたずらに長いかもしれませんが)。 DELETE FROM ATABLE WHERE KEY1 IN (SELECT ATABLE.KEY1 FROM ATABLE,BTABLE WHERE ATABLE.KEY1 = BTABLE.KEY1 AND ATABLE.KEY2 = BTABLE.KEY2 AND BTABLE.CODE = 1) AND KEY2 IN (SELECT ATABLE.KEY2 FROM ATABLE,BTABLE WHERE ATABLE.KEY1 = BTABLE.KEY1 AND ATABLE.KEY2 = BTABLE.KEY2 AND BTABLE.CODE = 1) これで良い/悪い、もっと簡潔にできる、などありましたら是非お聞かせ願えますでしょうか? よろしくお願いします。

  • DELETEの操作で (PostgreSQL)初心者

    テーブルの中に日付(2002/02/02)、社員番号(10)、JOBno(1234)、種別番号(10)作業時間(8.00)の項目順に並んであり、数値が入っています。(カッコの数値は例です) このテーブルの中の2002/02/01から2002/02/15までのデータをDELETEさせたいの ですがまだよくわかってないので教えてください。  あと2002/02/16から2002/02/末日までのもわかればおねがいします。 (末日は28、29、30、31のパターンを別々にだせばよいのですかね?) DELETE FROM テーブル名 WHERE 2002/02/01....?(指定する条件がわかりません)

  • SQL : たしかに DELETE したの?

    ありがちな処理かと思いまして質問させていただきます。 SQLで DELETE を行う際、WHERE で絞り込んだ対象行がなくても、  「エラーは返ってこない」 ということですが、NOT FOUND判定はするのでしょうか。 ごく単純に、削除しようとしたデータが実際にあったのかを確認したいのです。 やろうとしている処理は、次のようなものです。 DELETE FROM a_tbl WHERE NOT EXISTS (SELECT row1 FROM b_tbl WHERE row1 = 'input_data' ) AND NOT EXISTS (SELECT row1 FROM c_tbl WHERE row1 = 'input_data' ); ようするに、他のテーブルに、すでにない行であることが前提で、 a_tbl から DELETE したことを確認したいのです。 Pro*C内で実行するのですが、一般に同じだと思います。 キホンのキかもしれませんが、よろしくお教えください。

  • EclipseでMySQLにDELETE文を二つまとめて送れない

    環境 WindowsXP Eclipse3.4 MySQL5.1 Server str="DELETE FROM table1 where id=28;DELETE FROM table2 where id=28";という文を実行したのですが 動作しなくて困っています。分かる方がいましたら教えてください。 よろしくお願いします。 st.executeUpdate(str);を利用し、DELETE文ひとつの場合は実行できました。 MySQLServerに直接入力しても実行できました。 しかしEclipseから読み込んで実行すると com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM table2 where id=28' at line 1 というエラーがでてわかりません。 分かる方がいましたらよろしくお願いします。

    • ベストアンサー
    • Java
  • DELETE文とロックについて

    DELETEしようとしているレコードがロックされている場合は、削除せず すぐに処理を戻したいです。イメージ的にNOWAITが最適と思い →DELETE FROM テーブルA WHERE カラムA = 'A' NOWAIT としたいところですが、NOWAITはSELECT文でしか指定できないとのことなのでNGです。 SELECT文で抽出した条件のレコードを削除する場合 →DELETE FROM テーブルA WHERE カラムA =      (SELECT カラムA FROM テーブルA WHERE カラムA = 'A') と出来ます。 又、SELECT文でロック待機時間なしの場合 →SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT と出来ます。 これらを組み合わせて、ロックされているレコードを削除しようとした場合、 すぐにNGで制御を戻すように、次のように記載してみました。 →DELETE FROM テーブルA WHERE カラムA =    (SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT) なぜかNGになってしまいます(右カッコがありませんと言われます)。 なぜこの書き方が出来ないのでしょうか? 現在、一度該当のレコードをSELECT文でFOR UPDATE NOWAITをしてから DELETEをしています。 1つレコードを削除したいだけなのに、わざわざSELECT文と DELETE文を発行してしまっています。 こういう場合、他にどのような方法があるのでしょうか? 宜しくお願いします。

  • DELETE 文とEXISTSの使い方について(Oracle10g)

    DELETE 文とEXISTSの使い方について(Oracle10g) 2つのテーブル(A、B)を外部結合して、B側がNULLとなったレコードを A側から削除する、というDELETE文が作りたいのですが、 EXISTS句を使ってみたもののどうも使い方がわからず苦戦しています。 目的は2つのテーブルを同期させる事で このSQLを実行する時点で、常にA>Bになっています。 目的を達成できるSQLを教えてください。 <削除対象レコードをSELECTするSQL> SELECT * FROM A, B WHERE A.KEY1 = B.KEY1(+) AND A.KEY2 = B.KEY2(+) AND B.KEY1 IS NULL ; <上をDELETE文にしてみたつもりが、削除0件になってしまうSQL> DELETE FROM A WHERE EXISTS( SELECT 1 FROM B WHERE A.KEY1 = B.KEY1(+) AND A.KEY2 = B.KEY2(+) AND B.KEY1 IS NULL ) ;

  • SQLの DELETE文を関数で実現するアイデア?

     当方、エクセルは一度も操作したことがありません。それなのに 1、クロス集計クエリーをエクセルで実現する。 2、ユニオンクエリ―をエクセルで実現する。 3、SQL言語で全ての操作を実現する。  以上をVBAコードやマクロを使わないで式(関数)一発で可能とするに挑戦中。 1、クエリーの結果をシートに表示する。 2、Delete文の実行を可能にする。 【質問】SQLの DELETE文を関数で実現するアイデアとは? 今、私が、考えているアイデアは、 Step1:削除対象の先頭列に"#delete"を書き込むUpdate文を実行する。 Step2:先頭列に"#delete"のある行を、エクセルの.Delete で削除する。 Step2の対案: 先頭列に"#delete"のある行を不要行と見做して必要行を繰り上げて詰める。  エクセルユーザーが、《テーブルシート》《データ入力シート》《レポートシート》という考えでシート設計していれば、現行の有力候補でOKだと思います。が、「あくまでもテーブルの行だけを削除しなきゃーダメ1」と言われれば、対案を考えざるを得ません。  で、皆さん、グッドアイデアはありませんか?

  • 【Access】先頭2文字が条件に該当するレコードを削除する方法について

    下記のテーブルがある場合、下記のSQL文を実行すると、 3200~3299のレコードが削除されました。 これを3000~3999のレコードを削除するようにすれば宜しいでしょうか? なおSQL文の「3200」の箇所に「32000」と入力した際は、 32000~32999のレコードを削除したいと思います。 【SQL文】 DELETE * FROM TABLE WHERE key Like Left(3200,2) & '*' 【テーブル(TABLE)の中身】 key 3000 ~ 3999 30000 ~ 39999 ちなみにテーブルのkey列は数値型のため、数値の前に0を付加する事はできませんでした (なお文字列型に変更する事は出来ません)。 「WHERE key Like Left(3200,2) & '*'」を変更すれば解決するかと思いますが、 どのように記述すればよいか思いつきませんでした。 その為、何か良い手をご存知の方がいらっしゃいましたら、アドバイスをいただければと思います。 よろしくお願いします。

  • PL/SQLのDELETE文について

    PL/SQLでDELETE文を書こうとしているのですが、 文法がわかりません。。。 分かる方がおられましたら、教えてくださいm(_ _)m 今、TABLE1を削除したいのですが、条件がいろいろあって、 以下のように書いてみたのですがダメでした。 こういう書き方は、できないんでしょうか・・・。 削除条件は、TABLE2に存在し、かつ、TABLE2のTENSUが0のもので、 TABLE3が存在しないものです。 DELETE TABLE1 FROM TABLE1 ,TABLE2 ,TABLE3 WHERE TABLE1.ID = TABLE2.ID AND TABLE2.TENSU = 0 AND Not Exists (SELECT TABLE3.ID FROM TABLE3 WHERE TABLE3.ID = TABLE2.ID) 説明が下手なので、うまく、伝わっているか、心配なのですが・・・、 よろしくお願いします。

  • MYSQLのDELETE構文について

    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; どのように直したらいいのでしょうか?

    • ベストアンサー
    • MySQL