要从两个不同的表中删除mysql事件

时间:2012-10-19 11:17:53

标签: mysql

我有一个每分钟运行的Mysql事件,用于删除超过一个小时且尚未验证的记录。

所以table1有(例子)

userid | timestamp
------------------
1      | >1 Hr
2      | <1 Hr
3      | <1 Hr
4      | >1 Hr

所以这里,用户ID 1&amp; 4将被删除。

我还需要从另一个名为profiles的表中删除数据,其中当用户注册时会自动插入userid和其他数据。所以:

所以table2有

userid | ProfileName
------------------
1      | James
2      | Kirk
3      | Lars
4      | Robert

这里,在上表中,1&amp; 4也需要删除,因为它们已从上表中删除。此表中没有时间戳列(我无法添加)。

删除数据:

delete from table1 where rs_user_sg_ts >= date_sub(NOW(), interval 1 hour);

如何使用相同的事件一次删除两个表中的数据?

4 个答案:

答案 0 :(得分:1)

  DELETE a.*, b.* 
  FROM table1 a 
  JOIN table2 b 
    ON a.user_id = b.user_id 
    WHERE a.user_id in 
            (
                  select user_id from table1 
                  where rs_user_sg_ts >= date_sub(NOW(), interval 1 hour
             );

答案 1 :(得分:0)

DELETE t1, t2
FROM table1 AS t1 
INNER JOIN table2 AS t2 ON t1.userid = t2.userid 
WHERE t1.rs_user_sg_ts >= date_sub(NOW(), interval 1 hour)

有关多表删除语法,请参阅http://dev.mysql.com/doc/refman/5.0/en/delete.html

答案 2 :(得分:0)

在我看来,你不应该在单个查询中删除多个表。

如果您仍然感兴趣,请使用以下内容:

多表语法:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]

Refrence: http://dev.mysql.com/doc/refman/5.6/en/delete.html

希望这有帮助!

答案 3 :(得分:0)

您可以按如下方式从多个表中删除:

delete t1,t2 
from `table1` t1, `table1`t2
where t1.userid=t2.userid
and t1.rs_user_sg_ts >= date_sub(NOW(), interval 1 hour)