2011-07-22 9 views
0

A)テーブルを想定します。私はDELETE機能を実行したいと思っています。 これは、msアクセス2003のSQLクエリで行われます。 注:多くの多くのエントリが多数存在します。大規模なデータセットを扱うコードがあればうまくいけばいいでしょう。気分だけの3種類があります。SQLクエリで重複を削除するmsアクセス

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

1日に気分がいくらかある場合は、最も重要なものを保持したいだけです。 したがって、重複した日に対して削除機能を削除することができます。まず重要度の低い気分を削除する。気分の重要性はハッピー>マッド>悲しいです。だから私がしたい:

DayNumber Mood 
    1  Mad 
    2  Happy 
    3  Happy 

B)私は、最初の2つのjsut気分のための3つのオプションを指定せずに簡単に始めました。どこハッピー>私が理想的でしょう

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

悲しい

DayNumber Mood 
    1  Sad 
    2  Happy 
    3  Happy 

あなたが、私はどちらかの方法こだわっている私にとっては最初の例やsecodnを行うかどうかは重要でdoesntの!

これは私が今までの2番目の質問にあります。それはどこの句で集約関数を持っていません。

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

ありがとう!私は3つの気分をする方法の前に手がかりを持っていなかった!ランダムな質問をしないでください。 ORDER BYをDELETEすることは可能ですか? jsut私はそれが削除機能が実行された後に特定の方法を注文したいので、私は注文のためのaotehrクエリjsutを作成する必要はありません – Chaostryder

+0

また、私は非常に多くのエントリがある場合はどうすればよいですか?数十万の範囲にあります – Chaostryder

+1

いいえ、 'DELETE'ステートメントは' ORDER BY'をサポートしていません。後で興味のある行を 'SELECT'する必要があります。それでは' ORDER BY'だけを使用できます。 – dmc

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

これはシンプルで素敵です – Chaostryder

関連する問題