我正在尝试创建一个包含3列(Group_Name、Member、Position)的表。当我从DB中的另一个表填充此表时,列Group_Name( parties)将包含重复项。当出现重复时,位置将加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'我认为这是因为位置键不知道它前面的条目。
任何建议都将不胜感激,因为这让我抓狂!
发布于 2018-02-11 05:23:23
在插入之前检查触发器内部的最大位置,如下所示:
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 ;https://stackoverflow.com/questions/48723132
复制相似问题