Mysql 以下删除查询有什么问题?
我想在MYSQL中创建一个Mysql 以下删除查询有什么问题?,mysql,Mysql,我想在MYSQL中创建一个过程,它每小时运行一次,删除文档表中的所有条目。我想删除所有访问级别为5的文档,如果这些文档是由来自法国的人在一年后发布的,如果这些用户在发布文档时未满18岁 下面的代码给出了一个错误,并告诉我检查语法。 有没有人对如何修复代码以使其成为一个工作过程有任何想法 CREATE EVENT hourlydelete ON SCHEDULE EVERY 1 HOUR DO CALL delete_Document(); DELIMITER $$ CREATE PROCED
过程
,它每小时运行一次,删除文档
表中的所有条目。我想删除所有访问级别为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;
CREATE EVENT hourlydelete
按计划每1小时
调用delete_Document();
分隔符$$
创建过程删除文档()
开始
从文档中删除
其中(Document.idPerson=Person.idPerson和Person.Country='France'和Document.AccessLevel=5)
和((DATEDIFF(文件已过账,个人出生日期)/365)<18)
和((DATEDIFF(NOW(),Document.Posted)/365)>3)
按Document.idPerson订购
结束
$$
定界符;
删除
ORDER by Document.idPerson
因为您没有使用SELECT
查询,所以没有要orderby
的结果集
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
(使用之前)删除记录,但不从t3
删除记录
所以,你实际上需要使用
DELETE FROM Document USING Document INNER JOIN Person
WHERE ...
这样可以确保仅删除文档
记录,并且人员
仅用于指定标准。另外,请注意,ORDER BY
和LIMIT
不能与多表DELETE
s一起使用。您缺少分号代码>在DELETE
语句的末尾
此外,您的条件似乎是“a)或b)或c)”,但您可能需要或逻辑时,使用了和逻辑
将主和
运算符更改为或
,并添加分号:
DELETE FROM Document
WHERE (Document.idPerson = Person.idPerson AND Person.Country = 'France' AND Document.AccessLevel = 5)
OR ((DATEDIFF(Document.Posted,Person.DateOfBirth) / 365) < 18)
OR ((DATEDIFF(NOW(), Document.Posted)/365) > 3); -- Add a semi colon!
从文档中删除
其中(Document.idPerson=Person.idPerson和Person.Country='France'和Document.AccessLevel=5)
或((DATEDIFF(文件已过账,个人出生日期)/365)<18)
或者((DATEDIFF(NOW(),Document.Posted)/365)>3);--添加分号!
谢谢,但是查询的其余部分是否符合我想要的3个条件?delete语句中的order by子句在mysql中是有效的,因为mysql也允许带有delete的limit子句。删除它不会有任何效果。@Bohemian嗨,如果不是Bohemian的Order by子句,您对导致问题的原因有什么建议吗?@corybaxter看到我的答案了@corybaxter,请检查我的答案中更新的多表MySQL语法。但我希望所有条件都满足,只有这样它才能删除数据。OR语句是否可以执行此任务?是否确实要和???这似乎不太可能——它们都是合理的理由,而条件是不相关的。order by的存在或不存在对删除哪些行没有影响-这只关系到删除时的限制claus。如果来自法国的人在一年后发布了访问级别为5的所有文档,如果这些用户在发布文档时未满18岁,我想删除这些文档。另外该过程将在小时内运行,并将删除运行该过程时超过3年的任何合格文档。我认为OP需要,但和/或不应导致语法错误。它应该无法删除正确的记录。