Mysql 使用来自另一个 table 的信息从 table 中删除

Mysql DELETE from table using information from another table

所以我有这两个 tables:


(来源:gyazo.com

站点 table 包含要投票的所有类型的网站,Voted_sites table 包含所有已投票的网站。

现在,当当前日期大于 date_voted + interval vote_wait_time_hours

时,网站应该从 Voted_sites 中删除

所以在我的情况下,我会这样做:

DELETE FROM voted_sites 
LEFT JOIN sites ON voted_sites.site_id = sites.id 
WHERE voted_sites.date_voted < NOW() - INTERVAL sites.vote_wait_time_hours HOUR

但不幸的是它给出了我的语法错误,因为我猜你不能像在删除查询中那样使用 LEFT JOIN

基本上我需要从 sites 中获取具有相同 ID 密钥的 vote_wait_time_hours

将其更改为子查询,它应该可以工作。

这是一个粗略的例子(没有测试):

DELETE FROM voted_sites
WHERE voted_sites.date_voted < NOW() - INTERVAL (SELECT vote_wait_time_hours WHERE id = site_id) HOUR

您可以在子查询中使用 exists 运算符:

DELETE 
FROM   voted_sites 
WHERE  EXISTS (SELECT *
               FROM   sites 
               WHERE  voted_sites.site_id = sites.id AND 
                      voted_sites.date_voted < 
                      NOW() - INTERVAL sites.vote_wait_time_hours HOUR);

我相信在这种情况下您只需要指定要从中删除的 table,JOIN 不是问题。

DELETE voted_sites 
FROM voted_sites 
LEFT JOIN sites ON voted_sites.site_id = sites.id 
WHERE voted_sites.date_voted < NOW() - INTERVAL sites.vote_wait_time_hours HOUR