0

让我们看看我能否确定这个问题,因为这对我的中级 MySQL 技能来说相当复杂。

问题:

我需要更新我的一个数据库表中的一些数据。问题是我正在更新的数据与不止一行相关联。

id mailing_list_id 订阅者 ID

9031 51 81053

9112 52 81053

13535 71 81053

我需要更新 mailing_list_id 52 并将其重命名为 51 但subscriber_id 已经存在且 mailing_list_id 为 51 所以我想在更新期间跳过该记录。

当我使用以下内容时:

更新订阅 SET mailing_list_id = 51 WHERE mailing_list_id = 52;

我收到一条错误消息,提示存在重复条目。

我需要做的是忽略查询中的重复项,但我不知道如何编写查询。任何帮助,将不胜感激。

我需要在我的查询中添加一些内容,以跳过订阅者 ID 已经具有邮件列表 ID 的行 # 与我尝试将其更改为的行相同。不确定这是否有意义,或者在这一点上我是否在漫无目的。我知道我想做什么我只是不知道实现它的查询语法或方法。

4

2 回答 2

2

哪个字段 mailing_list_id 有索引(唯一或主要)?如果是,那么您无法更改其他行中存在的数据。

解决方案是: 1. 您删除字段 mailing_list_id 中的额外键(唯一或主键)。2.或者您创建新表并删除表,删除表订阅后,在下面运行查询以创建新表订阅。

CREATE TABLE subscriptions (
     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
     mailing_list_id INT(11),
     subscriber_id INT(11)
);
于 2013-01-23T22:31:34.673 回答
0

虽然我不建议将其作为永久解决方案,但这应该可以消除您的错误,这样您就可以在规划更好的模式时让事情正常进行 - 唯一键REPLACE INTO等。

UPDATE IGNORE subscriptions SET mailing_list_id = 51 WHERE mailing_list_id = 52;
于 2013-01-23T21:30:06.367 回答