Обойти MySql Ошибка 1093 с подзапросом NOT IN - PullRequest
1 голос
/ 24 февраля 2011

Как мне выполнить то, что я пытаюсь выполнить с помощью следующего запроса?

DELETE SomeDB.outertable 
FROM SomeDB.logging AS outertable
WHERE outertable.log_id NOT IN
    (
    SELECT SomeDB.f.log_id
    FROM
        (
        SELECT aa.*, MAX(aa.log_id) AS max_log_id
        FROM SomeDB.logging AS aa
        WHERE aa.operation_status = -1
        GROUP BY aa.process_id

        UNION ALL
        SELECT bb.*, MAX(bb.log_id) AS max_log_id
        FROM SomeDB.logging AS bb
        WHERE bb.operation_status = 1
        GROUP BY bb.process_id

        UNION ALL
        SELECT cc.*, MAX(cc.log_id) AS max_log_id
        FROM SomeDB.logging AS cc
        WHERE cc.operation_status = 0
        GROUP BY cc.process_id
        )
    AS x
    INNER JOIN SomeDB.logging AS f
        ON f.process_id = x.process_id
        AND f.log_id = x.max_log_id
    )

Я пробовал несколько вариантов этого, основываясь на небольшом исследовании в Интернете, но я всегдаполучить следующую ошибку:

Код ошибки: 1093 Нельзя указать целевую таблицу 'externaltable' для обновления в предложении FROM

Редактировать: Я пытаюсь очиститьсоздать таблицу регистрации событий, удалив все, кроме самой последней записи каждого типа для каждого процесса.

1 Ответ

0 голосов
/ 24 февраля 2011

Удалите SomeDB.outertable из вашего запроса, чтобы он начал

DELETE FROM SomeDB.logging AS outertable
...