我的数据库中有下表:
CREATE TABLE IF NOT EXISTS `candidate` (
`candidate_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`roll_no` int(10) unsigned NOT NULL,
`candidate_name` varchar(255) DEFAULT NULL,
`batch_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`candidate_id`),
KEY `candidate_name` (`candidate_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;
我需要做的是将roll_no分配给特定批处理中的候选人。即每个batch_id的roll_no将从1开始。 *(不用说,每个批处理或batch_id有数千个候选者)*。 roll_no字段的值默认为0。
我尝试做的事情:
UPDATE candidate c, (SELECT @id := 0) serial
SET roll_no = (@id := @id + 1)
WHERE c.batch_id = 5
ORDER BY c.candidate_name ASC
导致:UPDATE 和 ORDER BY 的使用不正确 如果我省略 ORDER BY 子句,它可以正常工作,但我需要根据候选人姓名的升序将 roll_no 分配给候选人 有什么方法可以实现我正在尝试的目标......最重要的是,我清楚吗? 提前感谢大家。
最佳答案
这行得通吗?
SET @id := 0;
UPDATE candidate c
SET roll_no = (@id := @id + 1)
WHERE batch_id = 5
ORDER BY candidate_name ASC;
关于mysql - UPDATE 表名, (SELECT @id := 0) dm SET sale_id = (@id := @id 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577396/