您在DELETE
查詢中對錶emails_bodies
有額外的參考。試試這個:
DELETE emails.*
FROM emails
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id
WHERE emails.date_modified < "2013-01-01"
我也刪除選擇列表中的一個表,因爲MySQL並不在一個查詢中從兩個不同的數據表中刪除。發生這種情況的一個選擇是在父表(例如emails
)和子表(例如emails_bodies
)之間設置級聯。然後刪除emails
中的記錄將自動刪除emails_bodies
中的外鍵引用。
至於爲什麼你得到一個Not unique table/alias
錯誤,MySQL的解釋您的查詢沿着以下線的東西:
DELETE emails, emails_bodies
FROM emails
INNER JOIN emails_bodies -- cross join, since no ON condition given
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id
WHERE emails.date_modified < "2013-01-01"
您使用相同的表名兩次,沒有給每個唯一的別名。
偉大的描述。您的解決方案是否會從兩個表中刪除行或只是「電子郵件」? – David
@David我很急於發佈,我甚至沒有注意到你的選擇列表。不要這樣做。如果您確實需要立即從兩個表中刪除,請使用外鍵刪除級聯刪除。 –
明白了,我只會運行兩個刪除查詢,因爲我不知道如何級聯。 – David