让我们看看我是否可以解决这个问题,因为这对我的中级MySQL技能来说非常复杂。
问题:
我需要在我的一个数据库表中更新一些数据。问题是我正在更新的数据与多行绑定。
id mailing_list_id subscriber_id
9031 51 81053
9112 52 81053
13535 71 81053
我需要更新mailing_list_id 52并将其重命名51但是subscriber_id已经存在且mailing_list_id为51,所以我想在更新期间跳过该记录。
当我使用以下内容时:
UPDATE subscriptions SET mailing_list_id = 51 WHERE mailing_list_id = 52;
我收到错误消息,说有重复的条目。
我需要做的是忽略查询中的重复项,但我不知道如何编写查询。任何帮助将不胜感激。
我需要在查询中添加一些内容,以跳过订阅者ID已经拥有邮件列表ID#的行,与我尝试将其更改为的列相同。不确定这是否有意义,或者在这一点上我是在漫无边际。我知道我想做什么我只是不知道查询语法或方法来实现它。
答案 0 :(得分:2)
mail_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)
);
答案 1 :(得分:0)
虽然我不建议将其作为永久性解决方案,但这应该可以消除您的错误,这样您就可以在计划更好的架构时使事情正常工作 - 唯一键,REPLACE INTO
等。
UPDATE IGNORE subscriptions SET mailing_list_id = 51 WHERE mailing_list_id = 52;