依赖于嵌套的select和delete MySQL语句中的多个表


Rely on multiple tables inside a nested select and a delete MySQL statement

我正在尝试编写一个双MySQL查询,它将一个表的内容归档到另一个表,然后删除原始表中的原始行。

我让基本查询在其他领域也能正常工作。下面的查询依赖于第二个表来帮助选择哪些行需要存档&已删除。

我得到一个语法错误,其中AS出现在第一个查询的嵌套选择中,而在删除查询中靠近AS。

我研究了很多不同的代码组合,但我无法让查询正常工作。查询是使用PDO用PHP编写的,所以请忽略PDO标记,它们不是问题所在。

INSERT INTO usetwca (r_id, c_id, o_id, t_id, s_id, ip_address, timestamp, timestamp_archived) SELECT :r_id, usetwc.c_id, usetwc.o_id, usetwc.t_id, usetwc.s_id, usetwc.ip_address, usetwc.timestamp, :timestamp FROM usetwc JOIN useo ON useo.o_id = usetwc.o_id AND useo.best_fit IS NULL WHERE usetwc.user_id = :user_id;
DELETE FROM usetwc JOIN useo ON useo.o_id = usetwc.o_id AND useo.best_fit IS NULL WHERE usetwc.user_id = :user_id;

您应该将其实现为`users_sessions_exercise_t_ws_correlation'表上的BEFORE DELETE触发器。

看看这个答案作为一个好例子。

这里有一个很好的关于使用触发器进行日志记录的一般参考。

我能够让我的查询正常工作。

INSERT INTO usetwca (r_id, c_id, o_id, t_id, s_id, ip_address, timestamp, timestamp_archived) SELECT :r_id, usetwc.c_id, usetwc.o_id, usetwc.t_id, usetwc.s_id, usetwc.ip_address, usetwc.timestamp, :timestamp FROM usetwc JOIN useo ON useo.o_id = usetwc.o_id AND useo.best_fit IS NULL WHERE usetwc.user_id = :user_id;
DELETE usetwc FROM usetwc INNER JOIN useo ON useo.o_id = usetwc.o_id AND useo.best_fit IS NULL WHERE usetwc.user_id = :user_id