作为修剪过程的一部分,我正在尝试从不再使用的表中删除数据。有搜索作业(表格搜索)有结果(表格Res),人们通过电子邮件收到搜索结果(表格Abo)。对于每个Abonnement,通过电子邮件发送的最后一个结果都保存在#34; last_result"列中。
我想做什么:对于每个搜索作业,我都想删除已发送给用户的所有结果。
这是结构的简化变体:
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
我试图做的是这样的事情:
DELETE r
FROM Res r
JOIN Abo a ON r.search = a.search
WHERE
r.id < min(a.last_res)
对于每个&#34;搜索&#34;值,我想删除所有结果(&#34; Res&#34;),这些结果低于&#34; last_res&#34; &#34; Abo&#34;表
答案 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