解决方案 »
- Tsql转Mysql
- 如何创建default value是NOW的column?
- 在一张表中,给定一个ID号,查出该ID下所属全部节点,请指教!
- sql中update语句问题 ——将一个表中一列按照一定条件移到另一个表中的一列
- Mysql 怎样在日志中记录IP
- 救命!中文“纪璞”插入mysql的数据库,居然出错!为什么?
- 我从文本文件导入数据到MYSQL表,为什么记录的中文的内容都变成了####,而英文和数字正常。
- mysql 左连接后 用mysql_fetch_assoc取键名的问题
- dbvisualizer连接MySQL, 运行SQL建表文件后,表没有创建
- mysql报错,导致mysql_pid不定时被kill
- 刚下载JDBC在mysql官网为什么没有中国国旗
- 求数据库批量替换关键词的MYSQL代码
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
`taskindex` int(11) unsigned NOT NULL,
`starttime` datetime NOT NULL,
`actcount` int(11) unsigned NOT NULL DEFAULT '0',
`alive` int(10) unsigned NOT NULL DEFAULT '0',
}
INSERT INTO `tasks`(`taskindex`, `starttime`, `alive`) values
(1, '2011-01-22 15:15:27', '1')
(2, '2011-01-23 16:15:27', '2')
(3, '2011-01-22 17:15:27', '2')
CREATE TABLE IF NOT EXISTS `act` (
`actindex` int(10) unsigned NOT NULL AUTO_INCREMENT,
`taskindex` int(11) unsigned NOT NULL,
`content` tinytext COLLATE utf8_unicode_ci NOT NULL,
`flag` enum('wait','pass','fail') COLLATE utf8_bin NOT NULL DEFAULT 'wait',
}INSERT INTO `act`(`actindex`, `taskindex`, `content`) values
(1, 1, '123')
(2, 1, '23')
(3, 1, 'adef')
(4, 2, 'test')
(5, 2, 'www')
(6, 3, 'eeef')其中,act表每条insert都会在tasks表中队对应的计数项actcount进行+1递增而现在需要实现,根据ADDDATE(`starttime`, `alive`)来判断,act是否过期,如果过期,则`act`,`flag` = 'fail',并且在tasks表中把对应的actcount计数器-1我试过的是
UPDATE `act` join (`tasks`) on (`tasks`.`taskindex` = `act`.`taskindex`) set `act`.`flag` = 'fail', `tasks`.`actcount` = `tasks`.`actcount` -1 where `act`.`flag` = 'wait' and now()<ADDDATE(`tasks`.`starttime`, `tasks`.`alive`)因为act和tasks为多对1,所以会出现同时update多个act,但是以上语句只对计数器-1的情况请问该如果修改,才能达到`actcount`正常计数
事务的话就是把单句拆成多句SQL,如果要实现我想要的这个功能,感觉多句SQL感觉还是很麻烦的继续求高手指点
当一对多连接时, select 行集会列出多条结果,如果select标量,同样只得会出一个值
比如
select a.*,b.* from a join b ...
与
select a.*,(select b.... where ...) from a 若一对多,这种写法并不符合关系逻辑, 所以一般会是取聚合结果。
而update时, 若一对多,因为countB为标量,则会使用一标量赋值, 因此,只会使连接产生的最后一个行的对应列去更新。