mysql - UPDATE 表名, (SELECT @id := 0) dm SET sale_id = (@id := @id 1)

标签 mysql

我的数据库中有下表:

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/

相关文章:

MySQL:选择论坛主题列表中最新的海报

php - CSV格式数据输入mysql带分隔符

mysql - 数据库大于 RAM 的 MySQL 上的 "innodb_buffer_pool_size"

php - 如何在 yii2 搜索模型中编写 mysql 查询

php - 尝试显示两个表中的数据

mysql - 为什么这个查询只返回 1 行?

mysql - 简单的sql查询没有返回需要的对应值

mysql - 跳过慢查询日志

mysql - 在特定关键字之后从数据库中查找前 4 个词和后 4 个词?

javascript - 在 javascript 中管理 secret 信息