2016-11-14 70 views
1
delete from VA_demo_setup_NCSC_temp 
    where exists 
    (select * 
    from VA_demo_setup_enrolled va 
    where VA_demo_setup_NCSC_temp.student_id = va.student_id 
     and VA_demo_setup_NCSC_temp.academic_period = va.academic_period); 

我見過一些類似的帖子,但我還沒有能夠解釋爲什麼這個特定的查詢需要幾個小時。我試圖刪除兩個數據集中id和period的記錄。刪除在哪裏

+1

您正在使用哪些DBMS? –

+0

標記您正在使用的dbms。添加表格定義,包括索引。還要添加一些示例表數據和預期結果。 (格式良好的文本!) – jarlh

+0

你是否爲你的搜索字段(id和academic_period)建立了索引? –

回答

2

如果我們看到了您的表格結構和索引,那麼解釋糟糕的表現會更容易。但是,您的查詢可以重寫爲如下。您可能會發現這種方式更好,這是以您需要的方式刪除數據的更爲標準的方法。

DELETE   vt 
FROM   VA_demo_setup_NCSC_temp vt 
    INNER JOIN VA_demo_setup_enrolled va ON vt.student_id = va.student_id AND vt.academic_period = va.academic_period; 

也許你有一個由唯一標識符的VA_demo_setup_NCSC_temp表的主鍵? (在這種情況下,重寫的查詢不會改變性能)

+1

也許 - 並非所有RDBMS都支持以這種方式編寫查詢。 –

+0

@ Clockwork-Muse是的,我在這裏假設SQL Server在等待更多信息。出於興趣 - 哪些數據庫管理系統不允許此語法? – Drammy

+0

刪除* \t from VA_demo_setup_NCSC_temp e \t其中mergedId in(從VA_demo_setup_enrolled選擇mergedId); – David