- ベストアンサー
Oracle SQLでの重複データ削除に関するエラー
- Oracle SQLで重複データを削除するための構文がエラーとなります。右括弧が不足しているというエラーメッセージが表示されます。
- 構文中には正しく括弧が記述されているように見えますが、どこに誤りがあるのか判断できません。
- どなたかこの問題についてご教示いただけると幸いです。
- みんなの回答 (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句を利用した方がパフォーマンスが良くなるかもしれませんが詳しくは調べてください。
その他の回答 (3)
- osamuy
- ベストアンサー率42% (1231/2878)
ANo.2 takefuさんの回答をみて。 しまった、そんな落とし穴が。
括弧の一部に全角のものがあります。 SYSDATEのTO_CHARの型指定にシングルクォーテーションの"閉じ"がありません。
補足
有難うございます。 しかし、今回質問をする際構文の内容を手入力した物で 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)
引用符に着目。 > WHERE TO_CHAR(SYSDATE,'yyyy/mm/dd)=TO_CHAR(登録日時,'yyyy/mm/dd') たぶん早い者勝ちの回答。
お礼
ご親切におつきあい下さいまして誠に有り難う御座います。 大変参考になりました。本当に助かりました。