2014-06-13 40 views
1

我想刪除基於另一個表的表中陳舊的記錄。我們的問題是,課程分配給表A中兩個不同建築物的學生。根據Student_ID和Building,我們需要比較Table_ATable_B。如果學生的Table_B建築物不符合Table_A,刪除不具有相同建築物的記錄,但保留位於同一建築物中的記錄。比較兩個表並刪除陳舊的數據

Table_A包含學生的時間表:

  • SCHOOL_YEAR
  • student_id數據
  • 建築
  • 課程

Table_B包含學生報名:

  • student_id數據
  • 建築

這裏是我想出:

DELETE FROM Table_A 
WHERE exists 
(SELECT Table_B.STUDENT_ID, Table_B.BUILDING, TABLE_A.BUILDING 
FROM TABLE_B 
INNER JOIN TABLE_A ON Table_B.STUDENT_ID = Table_A.STUDENT_ID 
AND Table_B.BUILDING <> Table_A.BUILDING 
AND Table_A.SCHOOL_YEAR = 2015) 
+0

它不清楚哪一部分您當前的查詢不起作用。也許一些示例數據或[小提琴](http://www.sqlfiddle.com) – paqogomez

+0

@paqogomez,語法錯誤。 –

+0

許多數據庫具有不同的語法,用於根據另一個表中的值刪除一個表的內容。你正在運行哪個數據庫?這將有助於獲得更好的答案。 :) – Barett

回答

0

你可以做這樣的:的

DELETE FROM Table_A 
WHERE STUDENT_ID IN (SELECT a.STUDENT_ID 
        FROM TABLE_B b 
        JOIN TABLE_A a ON (a.STUDENT_ID = b.STUDENT_ID) 
        WHERE a.BUILDING <> b.BUILDING 
         AND a.SCHOOL_YEAR = 2015) 
+0

我嘗試了相同的腳本,它給了我相同的結果。它正在刪除所有記錄。我最終創建了一個只包含我想要的數據的臨時表,並找到了臨時表中不存在的記錄。謝謝各位的意見。 – aj1970