mysql - 以下删除查询我做错了什么?

标签 mysql

我想在 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;

记录从t1t2(在USING之前)删除,但不从t3删除。

所以,你实际上需要使用

DELETE FROM Document USING Document INNER JOIN Person
WHERE ...

这可确保仅删除Document记录,并且Person仅用于指定条件。另请注意,ORDER BYLIMIT 不能与多表 DELETE 一起使用。

关于mysql - 以下删除查询我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296020/

相关文章:

javascript - 在 HTML 表单中使用 JQuery 动态下拉菜单 (PHP)

php - MySql 匹配最具体的人名

mysql - 如果我们搜索长度大于列长度的字符串,对 MySQL SELECT 查询的影响

java - 使用 Log4j2 在 MySQL 中获取语法错误(XML 配置)

mysql - 每年统计 每月至少一次频繁点餐的总人数

MySql 客户端正在使用或没有正确关闭表

mysql - 如何将 LIMIT 中的求和行算作一行?

php - 每个事件的自定义数据的重复事件

mysql - 从多个表中获取计数(*)sql

php - 在数据库中添加用户的逻辑