人生最悪の忘れ物

お世話になります。

Oracle Sqlでの質問を致します。
Oracleのデータで重複データを削除したく
下記の構文を書いたのですが、
右括弧がありませんと言うエラーが出てしまいます。
見た目括弧はちゃんとあると思うのですが、
どこが悪いのか分かりません。
ご親切な方、ご教示くださいます様、
宜しくお願いいたします。

         記

DELETE FROM D入庫データ
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM D入庫データ
GROUP BY PPID,台車番号,入庫数量,ロット番号,TO_CHAR(登録日時,'yyyy,mm,dd')
WHERE TO_CHAR(SYSDATE,'yyyy/mm/dd)=TO_CHAR(登録日時,'yyyy/mm/dd')
);

A 回答 (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句を利用した方がパフォーマンスが良くなるかもしれませんが詳しくは調べてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/13 01:28

ANo.2 takefuさんの回答をみて。


しまった、そんな落とし穴が。
    • good
    • 0

括弧の一部に全角のものがあります。


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の所で、今日のデータの中の重複データを削除されるつもり
でいたのですが、今日以前の物も全て削除されてしまいました。
構文に誤りがあるのでしょうか。
お分かりになる様でしたらご教示下さいます様、宜しくお願い致します。

補足日時:2013/06/11 22:34
    • good
    • 0

引用符に着目。



> WHERE TO_CHAR(SYSDATE,'yyyy/mm/dd)=TO_CHAR(登録日時,'yyyy/mm/dd')

たぶん早い者勝ちの回答。
    • good
    • 0

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

関連するカテゴリからQ&Aを探す


おすすめ情報