使用内部联接进行删除时出现MySQL错误(1066非唯一ID)
有点新手,试图从两个表中删除行。我不知道如何使用别名-这似乎是我的问题-任何帮助都会有帮助使用内部联接进行删除时出现MySQL错误(1066非唯一ID),mysql,Mysql,有点新手,试图从两个表中删除行。我不知道如何使用别名-这似乎是我的问题-任何帮助都会有帮助 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" 由于要加入同一个表,因此必须使用as来保持表名的唯一性 INNER JOIN
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"
由于要加入同一个表,因此必须使用
as
来保持表名的唯一性
INNER JOIN emails_bodies as emails_bodies_joined
在您需要加入表的每个地方使用
电子邮件\u body
,而不是电子邮件\u body
,您在删除查询中有一个对表电子邮件\u body
的额外引用。试试这个:
DELETE emails.*
FROM emails
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id
WHERE emails.date_modified < "2013-01-01"
您两次使用同一个表名,但没有给每个表指定唯一的别名。描述得很好。您的解决方案会同时删除两个表中的行还是只删除“电子邮件”?@David我当时急于发帖,甚至没有注意到您的选择列表。不要那样做。如果您真的需要同时从两个表中删除,请研究使用带外键的级联删除。明白了,我将只运行两个删除查询,因为我不确定如何级联。-我需要先删除子行,因为选择来自电子邮件标题表中的日期。现在我回到了非唯一表/aliax:“emails_body”。下面是我如何使用您的示例修改查询的:删除电子邮件\u body.*从电子邮件\u body内部加入电子邮件\u body上的电子邮件\u body.email\u id=emails.id WHERE emails.date\u modified<“2013-01-01”哈?为什么要把一张桌子连在一起?我认为这在删除的情况下是没有任何意义的。
DELETE emails.*
FROM emails
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id
WHERE emails.date_modified < "2013-01-01"
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"