有点新手,试图从两个表中删除行。我不确定如何别名 - 这似乎是我的问题 - 任何帮助都会有所帮助!
DELETE emails, emails_bodies
FROM emails, emails_bodies
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id
WHERE
emails.date_modified < "2013-01-01"
失败:
1066: Not unique table/alias: 'emails_bodies'
最佳答案
您在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"
您两次使用相同的表名,但没有给每个表一个唯一的别名。
关于使用内部连接删除时出现 MySQL 错误(1066 非唯一 ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37257791/