使用内部连接删除时出现 MySQL 错误(1066 非唯一 ID)

标签 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"

失败:

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/

相关文章:

mysql - SQL查询多表问题

Python 3.6 连接 MySQL

mysql - 尽管我使用 "IN"关键字,但子查询返回多于 1 行错误

php - 使用 PHP/MySQL 计算工作日和周末的天数

mysql - 计算单个语句中第二个查询中第一个查询的 SQL 结果

MySQL - 从时间戳列中选择每 2 小时的间隔

PHP HTTP 内容范围困惑

php - 重写我的查询以从选择语句中删除

php - 将 href 链接转换为图像链接使用缩略图

php - MySQL:如果所有值都存在则返回真