2011-07-22 86 views
0

A)假設一張表。我想對其執行DELETE功能。 這是在ms access 2003 sql查詢中完成的。 注意有許多很多許多條目。在幾十萬到幾百萬的範圍內。所以希望如果可以有一個能很好處理大數據集的代碼。只有3種心情。刪除SQL查詢中的重複ms訪問

DayNumber Mood 
    1  Mad 
    2  Sad 
    2  Happy 
    2  Sad 
    3  Sad 
    3  Happy 

當有一天有幾種情緒我們只想保留最重要的一個。 因此讓我們有刪除功能刪除重複的天。首先刪除不太重要的情緒。情緒的重要性是快樂>瘋狂>悲傷。所以,我想:

DayNumber Mood 
    1  Mad 
    2  Happy 
    3  Happy 

B)我第一次開始的心情不容易三個選項僅僅指剛兩項。其中,快樂>悲傷

DayNumber Mood 
    1  Sad 
    2  Sad 
    2  Happy 
    3  Sad 
    3  Happy 

在那裏,我得到理想

DayNumber Mood 
    1  Sad 
    2  Happy 
    3  Happy 

它不不管你做的第一例或secodn對我來說我堅持無論哪種方式!

這是我到目前爲止的第二個問題.. btu它不工作因爲我有一個聚合函數在where子句。

DELETE FROM Table 
WHERE (Mood='Sad') and (COUNT(DayNumber)=2); 

回答

1

如果你有心情的小&固定的號碼,就可以硬線層次結構如下所示:

DELETE FROM Table a 
WHERE 
(a.Mood='Sad' 
AND EXISTS 
    (SELECT 1 
    FROM Table b 
    WHERE b.DayNumber = a.DayNumber 
    AND b.Mood in ('Happy','Mad'))) 
OR 
(a.Mood = 'Mad' 
AND EXISTS 
    (SELECT 1 
    FROM Table c 
    WHERE c.DayNumber = a.DayNumber 
    AND c.Mood = 'Happy'))) 
+0

謝謝!我甚至沒有線索之前如何做三種情緒!只是一個隨機問題。是否有可能在DELETE中有一個ORDER BY? jsut如果我想要它在刪除功能運行後通過某種方式訂購,所以我不必讓訂購 – Chaostryder

+0

的anotehr查詢jsut也我應該怎麼做,如果我有一個非常大量的條目。在幾十萬範圍內 – Chaostryder

+1

不,「DELETE」語句不支持「ORDER BY」。之後,您必須「選擇」您感興趣的行,然後才能使用「ORDER BY」。 – dmc

1
DELETE FROM Table where Mood='Sad' AND DayNumber IN (SELECT DayNumber FROM Table WHERE Mood = 'Happy') 
+0

謝謝你,這很簡單,很好 – Chaostryder