Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用内部联接进行删除时出现MySQL错误(1066非唯一ID)_Mysql - Fatal编程技术网

使用内部联接进行删除时出现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"