从一个表中删除并在另一个表上查找

时间:2016-12-07 20:31:51

标签: mysql

作为修剪过程的一部分,我正在尝试从不再使用的表中删除数据。有搜索作业(表格搜索)有结果(表格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;表

1 个答案:

答案 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