2011-09-12 7 views
2

古い従業員データベースから古いレコードをアーカイブ内の古いレコードから削除しようとしています。Oracle DBMSでto_dateサブクエリを使用して削除

{社員、FamilyNameで、MiddleName、GIVENNAME、住所、郊外、州、郵便番号 }

経費 {:

DBの関連するテーブルは、次の構造を有しますExpenseNo、ManagerID、EmployeeID、LodgementDate}

従業員IDは経費のFKです関係。 LodgementDateの形式はMM-DD-YYYYです。

次のことを書くことだけで(テスト)DB内のすべてのレコードを削除しているようだ、とより古い(あるいはマッチング)されていないもの日:

DELETE FROM employee 
WHERE EXISTS 
    (SELECT * 
    FROM employee, expense 
    WHERE employee.employeeid= expense.employeeid 
    AND lodgementdate = to_date('08-01-2007', 'MM-DD-YYYY')); 

私が持っているレコードがあることを知っていますその正確なLodgementDateは、それでもすべてのレコードを削除します(これはテストベッドです)。

答えて

2

あなたの存在のfrom句からpatientを削除します。

DELETE FROM patient 
WHERE EXISTS 
    (SELECT * 
    FROM account 
    WHERE patient.patientid = account.patientid 
    AND treatmentdate = to_date('01-JAN-07', 'DD-MON-YY')); 
+0

ありがとう。 DBのORM(web-dev)側では、生のSQLよりも多くの時間を費やすため、構文が時々私を捕まえることになります。 – elithrar

+1

+1良い答え。しかし、FYIでは、patient_idがpatient_idの代わりにpatient_idが選択されています(この場合、treatmentdate = to_date('01 -JAN-07 '、' DD-MON-YY '))。 [このディスカッション](http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080)を参照してください。パフォーマンスが重要なときに興味深い。 –

関連する問題