gpt4 book ai didi

MySql - 当存在重复键时增加列

转载 作者:行者123 更新时间:2023-11-29 17:56:56 27 4
gpt4 key购买 nike

我正在尝试创建一个包含 3 列的表(Group_Name、Member、Position)。当我从数据库中的另一个表填充此表时,列 Group_Name(政党)将包含重复项。当发生重复时,位置将增加 1。例如:

Group_Name | Member     |     Position
------------------------------
democrats | joe b | 1
democrats | mark d | 2
democrats | owen l | 3
republican | esther d | 1
republican | tom d | 2
republican | ryan g | 3
republican | tea d | 4
pirate | bun r | 1

我创建了以 Group_Name 和 Position 作为主键的表。

CREATE TABLE Group_Membership ( Group_Name varchar(255) NOT NULL, Member varchar(255) NOT NULL, Position int, PRIMARY KEY (Group_Name, Position));

然后,当我插入数据时,每次出现重复时,位置都应更新 1。

INSERT INTO Group_Membership(Group_Name, Member, Position) SELECT group_affiliation.value, group_affiliation.name, 1 FROM group_affiliation ON DUPLICATE KEY UPDATE Position = Position + 1;

但是我收到错误:

Duplicate entry 'The Republican Party-2' for key 'PRIMARY'

我认为这是因为位置键不知道它之前的条目。

任何建议将不胜感激,因为这让我发疯!

最佳答案

在插入之前检查触发器内的最大位置,如下所示:

DELIMITER $$

CREATE TRIGGER updatePosition BEFORE INSERT ON Group_Membership
FOR EACH ROW BEGIN
SET NEW.Position = (
SELECT IFNULL(MAX(Position), 0) + 1
FROM Group_Membership
WHERE Group_Name = NEW.Group_Name
);
END $$

DELIMITER ;

关于MySql - 当存在重复键时增加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48723132/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com