4

次のクエリを実行すると、MySQLエラー「FROM句で更新するターゲットテーブルの「タスク」を指定できません」が発生します。

DELETE FROM tasks
WHERE tasks.id IN 
(
SELECT tasks.id
FROM tasks 
    JOIN deadlines ON deadlines.id = deadline_id
WHERE DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
)

どうすればこれを管理できますか?

ありがとう!

4

2 に答える 2

10

このようにサブクエリでラップできます。問題は、MySQLがクエリを実行している行を更新できないことです。これにより、MySQLは一時テーブルを暗黙的に使用して、削除するIDを格納します。

DELETE FROM tasks
WHERE tasks.id IN 
(
SELECT id FROM
(
SELECT tasks.id
FROM tasks 
    JOIN deadlines ON deadlines.id = deadline_id
WHERE DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
) AS taskstodelete
)
于 2011-05-15T09:12:13.507 に答える
1

これは、タスクテーブルを複数回指定しているためです。試す:

DELETE FROM tasks
USING deadlines
WHERE deadlines.id = tasks.deadline_id
AND DATE_ADD(tasks.created_at, INTERVAL deadlines.duration DAY) <= NOW()
于 2011-05-15T09:09:41.287 に答える