2

テーブル内のすべてのエントリをprocedure1 時間ごとに実行する MYSQLを作成したいと考えています。ドキュメントが投稿された時点でこれらのユーザーが 18 歳未満であった場合、1 年後にフランスのユーザーによって投稿された場​​合、アクセス レベル 5 のすべてのドキュメントを削除したいと考えています。deleteDocument

以下のコードではエラーが発生し、構文を確認するように指示されます。コードを修正して作業手順にする方法についてアイデアを持っている人はいますか?

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;
4

2 に答える 2

3

削除する

ORDER by Document.idPerson

SELECTクエリを使用していないため、結果セットはありませんORDER BY

DELETEMySQL でのステートメントのマルチテーブル構文は次のとおりです。

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id = t2.id AND t2.id = t3.id;

レコードはt1and t2(前USING) から削除されますが、 では削除されませんt3

したがって、実際に使用する必要があります

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

これにより、Documentレコードのみが削除されPerson、基準のみを指定するために使用されます。また、 and は multi-table では使用できないことに注意しORDER BYLIMITくださいDELETE

于 2013-08-18T05:35:34.060 に答える