2016-12-07 8 views
0

プルーニングプロセスの一部として、私はもはや使用されていないテーブルからデータを削除しようとしています。結果(テーブルRes)を持つ検索ジョブ(テーブル検索)があり、電子メールで検索結果(テーブルAbo)が表示されます。 Abonnementごとに、電子メールで送信された最後の結果が "last_result"列に保存されます。別のテーブルでルックアップを使用して1つのテーブルから削除

私がしたいこと:すべての検索ジョブについて、ユーザーに送信されたすべての結果を削除します。

これは、構造の単純化した変形である:私は、すべての "検索" 値について

DELETE r 
FROM Res r 
JOIN Abo a ON r.search = a.search 
WHERE 
    r.id < min(a.last_res) 

:私は何をしようとしたことは、このようなものである

http://sqlfiddle.com/#!9/5ef8a3

Abo 
--- 

user search last_result 
A  1   100 
B  1   200 
C  2   50 
D  3   100 

Res 
--- 

id  search 
50  1   <---- this should be deleted 
300  1 
51  2 

Search 
------ 

1 
2 
3 

"Abo"テーブルの "last_res"フィールドの下にあるすべての結果( "Res")を削除します。

+0

'r.search = a.search'の2つのテーブルには行がありません。それらが参加するフィールドであると確信していますか? – Barmar

+0

私は誤って列を入れ替えました。 –

答えて

1

MIN(last_res)searchにグループ化する必要があります。これを行うには、これを計算するサブクエリを作成し、そのサブクエリと結合します。

DELETE r 
FROM Res AS r 
JOIN (SELECT search, MIN(last_res) AS min_res 
     FROM Abo 
     GROUP BY search) AS a 
ON r.search = a.search AND r.id < a.min_res 
関連する問題