我的数据库中有下表:
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 分配给候选人有什么方法可以实现我正在尝试的。 ..最重要的是,我清楚了吗?提前谢谢大家。