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
所以我有这两个 tables:
(来源:gyazo.com)
站点 table 包含要投票的所有类型的网站,Voted_sites table 包含所有已投票的网站。
现在,当当前日期大于 date_voted + interval vote_wait_time_hours
。
所以在我的情况下,我会这样做:
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