1

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

所以 table1 有(示例)

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

所以在这里,userid 1 & 4 将被删除。

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

所以 table2 有

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

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

要删除数据,我会:

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

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

4

4 回答 4

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
             );
于 2012-10-19T11:28:04.773 回答
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

于 2012-10-19T11:27:55.423 回答
0

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

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

多表语法:

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

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

希望这有帮助!

于 2012-10-19T11:28:08.270 回答
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)
于 2012-10-19T11:30:53.930 回答