1

1 時間以上経過していてまだ検証されていないレコードを削除するために毎分実行されるこの Mysql イベントがあります。

したがって、table1には(例)があります

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

ここでは、ユーザー ID 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 に答える