新手的一点点,试图从两个表中删除行。我不确定如何别名 - 这似乎是我的问题 - 任何帮助都会有所帮助!
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'
答案 0 :(得分:1)
您对emails_bodies
查询中的表DELETE
有额外的引用。试试这个:
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"
您使用了相同的表名两次,而没有给每个名称一个唯一的别名。
答案 1 :(得分:0)
由于您加入同一个表,因此必须使用as
来保持表名唯一
INNER JOIN emails_bodies as emails_bodies_joined
而不是emails_bodies
在您需要加入的桌子的每个地方都使用emails_bodies_joined