我想在 MYSQL 中创建一个过程
,该过程每小时运行一次,以删除
Document
表中的所有条目。我想删除所有访问级别为 5 的文档,如果这些文档是由法国人在一年后发布的,并且这些用户在发布文档时未满 18 岁
下面的代码给了我一个错误并告诉我检查我的语法。 有谁对如何修复代码有任何想法,使其成为一个工作程序吗?
CREATE EVENT hourlydelete
ON SCHEDULE EVERY 1 HOUR
DO CALL delete_Document();
DELIMITER $$
CREATE PROCEDURE delete_Document()
BEGIN
DELETE FROM Document
WHERE (Document.idPerson = Person.idPerson AND Person.Country = 'France' AND Document.AccessLevel = 5)
AND ((DATEDIFF(Document.Posted,Person.DateOfBirth) / 365) < 18)
AND ((DATEDIFF(NOW(), Document.Posted)/365) > 3)
ORDER by Document.idPerson
END
$$
DELIMITER;
最佳答案
删除
ORDER by Document.idPerson
由于您没有使用 SELECT
查询,因此没有 ORDER BY
的结果集。
MySQL中DELETE
语句的多表语法为
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id = t2.id AND t2.id = t3.id;
记录从t1
和t2
(在USING
之前)删除,但不从t3
删除。
所以,你实际上需要使用
DELETE FROM Document USING Document INNER JOIN Person
WHERE ...
这可确保仅删除Document
记录,并且Person
仅用于指定条件。另请注意,ORDER BY
和 LIMIT
不能与多表 DELETE
一起使用。
关于mysql - 以下删除查询我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296020/