2011-09-12 34 views
2

我試圖從小型員工數據庫(使用歸檔中較舊的記錄)中刪除一些舊記錄。在Oracle DBMS中使用to_date子查詢刪除

數據庫的相關表格結構如下:

員工 {僱員,FamilyName,中間名,給定名稱,地址,郊區,國家, 郵編}

費用 {費用號,經理ID,僱員ID,寄存日期}

EmployeeID是費用中的FK 關係。 LodgementDate格式爲MM-DD-YYYY。

編寫以下似乎只是刪除(測試)數據庫中的所有記錄,而不是那些比年長的(甚至匹配)日期:

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子句中移除患者。

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

非常感謝。我在數據庫的ORM(web-dev)方面花了很多時間,而不是使用原始SQL,所以語法偶爾會吸引我。 – elithrar

+1

+1好答案。僅供參考,替代方法是從患者那裏刪除病例(在治療日期= to_date('01 -JAN-07','DD-MON-YY')的帳戶中選擇patient_id)''可以在這種情況下更好。參見[本討論](http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080)。表現很重要時很有意思。 –