• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:oracle sqlについて)

Oracle SQLでの重複データ削除に関するエラー

このQ&Aのポイント
  • Oracle SQLで重複データを削除するための構文がエラーとなります。右括弧が不足しているというエラーメッセージが表示されます。
  • 構文中には正しく括弧が記述されているように見えますが、どこに誤りがあるのか判断できません。
  • どなたかこの問題についてご教示いただけると幸いです。

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

  • ベストアンサー
noname#189141
noname#189141
回答No.4

> 但し、私はWHEREの所で、今日のデータの中の重複データを削除されるつもり > でいたのですが、今日以前の物も全て削除されてしまいました。 > 構文に誤りがあるのでしょうか。 構文に誤りはありません。構文通りに削除されただけです。 *WHERE句とGROUP BY句は、なんか引っかかってたのですが気付きませんでした。 副問い合わせの部分で、今日(SYSDATE)の重複しているデーターのID最少値を取得しています。 DELETEでは、そのID以外をすべて削除、ですので、日付などは関係なく削除されます。 今日のみというのであれば、DELETE文にもWHERE句で日付の指定を入れてください。 DELETE FROM D入庫データ WHERE ID NOT IN ( SELECT MIN(ID) FROM D入庫データ WHERE TO_CHAR(SYSDATE, 'yyyy/mm/dd') = TO_CHAR(登録日時, 'yyyy/mm/dd') GROUP BY PRID, 台車番号, 入庫数量, ロット番号, TO_CHAR(登録日時, 'yyyy,mm,dd') ) AND TO_CHAR(SYSDATE, 'yyyy/mm/dd') = TO_CHAR(登録日時, 'yyyy/mm/dd') ; ---- NOT EXISTS句を利用した方がパフォーマンスが良くなるかもしれませんが詳しくは調べてください。

miruchoko
質問者

お礼

ご親切におつきあい下さいまして誠に有り難う御座います。 大変参考になりました。本当に助かりました。

その他の回答 (3)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

ANo.2 takefuさんの回答をみて。 しまった、そんな落とし穴が。

noname#189141
noname#189141
回答No.2

括弧の一部に全角のものがあります。 SYSDATEのTO_CHARの型指定にシングルクォーテーションの"閉じ"がありません。

miruchoko
質問者

補足

有難うございます。 しかし、今回質問をする際構文の内容を手入力した物で ORACLEの方ではシングルの"閉じ"は有り、また括弧も半角に なっていました。 そして、 WHERE TO_CHAR(SYSDATE,'yyyy/mm/dd)=TO_CHAR(登録日時,'yyyy/mm/dd') GROUP BY PPID,台車番号,入庫数量,ロット番号,TO_CHAR(登録日時,'yyyy,mm,dd') と1行入れ替えましたらエラーがかからず動きました。 但し、私はWHEREの所で、今日のデータの中の重複データを削除されるつもり でいたのですが、今日以前の物も全て削除されてしまいました。 構文に誤りがあるのでしょうか。 お分かりになる様でしたらご教示下さいます様、宜しくお願い致します。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

引用符に着目。 > WHERE TO_CHAR(SYSDATE,'yyyy/mm/dd)=TO_CHAR(登録日時,'yyyy/mm/dd') たぶん早い者勝ちの回答。

関連するQ&A