求一条联合两个表的数据对某个表中的数据进行更新的HQL或SQL语句

fyjin99 2010-02-08 08:30:00

CREATE TABLE `userexpands` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`usercharge` int(11) DEFAULT NULL,
`remain` int(11) NOT NULL DEFAULT '0',
`sentcount` int(11) NOT NULL DEFAULT '0',
`mscount` int(11) NOT NULL DEFAULT '0',
`sent` int(11) NOT NULL DEFAULT '0',
`recharge` int(11) unsigned NOT NULL DEFAULT '0',
`time` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `usercharge` (`usercharge`),
CONSTRAINT `userexpands_ibfk_1` FOREIGN KEY (`usercharge`) REFERENCES `usercharge` (`id`) ON DELETE SET NULL ON UPDATE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE TABLE `usercharge` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`balance` int(11) NOT NULL DEFAULT '0',
`sent` int(11) NOT NULL DEFAULT '0',
`expand` int(11) NOT NULL DEFAULT '0',
`cost` int(11) NOT NULL DEFAULT '750',
`note1` varchar(255) DEFAULT NULL,
`note2` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
userexpands表和usercharge表的关系是1对多,userexpands表中的usercharge指向usercharge表的主键。
现在想对userexpands表中所有time>mytime,usercharge不为空的记录进行更新。
更新如下:userexpands.sentcount = usercharge.sent, userexpands.sent = usercharge.expand。
请问如何写出这样联合两个表的数据对userexpands表中的数据进行更新的HQL或SQL语句?
本人初接触数据库,用的是Hibernate+MySQL。
我原来的想法是根据这两个表查询出所有符合条件的userexpands,再逐条对返回集合中的记录进行更行,更新的时候加载相应的usercharge数据。但是这样效率不高,所以求一条能够实现上述更新的HQL或SQL语句。
...全文
561 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
fyjin99 2010-02-11
  • 打赏
  • 举报
回复
顶一顶!帮帮忙啊:)
fyjin99 2010-02-10
  • 打赏
  • 举报
回复
~~~~(>_<)~~~~ 看来要等到明年了
fyjin99 2010-02-10
  • 打赏
  • 举报
回复
引用 28 楼 zhangliangming_87 的回复:
update Userexpands set sentcount=t2.sent, sent=t2.expand from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge=t2.id

在 sentcount=t2.sent, sent=t2.expand  在 sentcount 和 sent 加表名 ,是不是这个没有指明确切的对象啊。

加上了表名还是不行,在my sql里这句根本就不通过。郁闷~~~~(>_<)~~~~
扁鵲東南飛 2010-02-10
  • 打赏
  • 举报
回复
update Userexpands set sentcount=t2.sent, sent=t2.expand from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge=t2.id

在 sentcount=t2.sent, sent=t2.expand 在 sentcount 和 sent 加表名 ,是不是这个没有指明确切的对象啊。
fyjin99 2010-02-10
  • 打赏
  • 举报
回复
帮帮忙啊,各位老大!
fyjin99 2010-02-10
  • 打赏
  • 举报
回复
引用 24 楼 zhangliangming_87 的回复:
update Userexpands set sentcount=t2.sent, sent=t2.expand from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge=t2.id

最后加个 where 条件,比如
where  id =100; 试试能不能成功。

不想啊,整个sql语句现在有错误
fyjin99 2010-02-10
  • 打赏
  • 举报
回复
引用 23 楼 yilugaofei 的回复:
不是吧? Hibernate可以自己搞定,干嘛还要自己写sql ,又不是用的ibatis

  楼主  服你了

Hibernate是通过笨方法搞定,效率不高啊。
扁鵲東南飛 2010-02-10
  • 打赏
  • 举报
回复
update Userexpands set sentcount=t2.sent, sent=t2.expand from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge=t2.id

最后加个 where 条件,比如
where id =100; 试试能不能成功。
yilugaofei 2010-02-10
  • 打赏
  • 举报
回复
不是吧? Hibernate可以自己搞定,干嘛还要自己写sql ,又不是用的ibatis

楼主 服你了
fyjin99 2010-02-10
  • 打赏
  • 举报
回复
update Userexpands set sentcount=t2.sent, sent=t2.expand from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge=t2.id
各位帮帮忙啊,这个sql语句到底是哪里错了?我在my sql里面执行不了,总说是语句错误。
select* from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge=t2.id 这句可以运行,肯定是没错的。
fyjin99 2010-02-09
  • 打赏
  • 举报
回复
帮帮忙啊!!!!年底了,各位老大就当给我发个福利了!!!
fyjin99 2010-02-09
  • 打赏
  • 举报
回复
呵呵,谢谢老大帮忙,我的qq:381238390
fyjin99 2010-02-09
  • 打赏
  • 举报
回复
我现在直接改成了
String q = "update Userexpands set sentcount=t2.sent, sent=t2.expand"+
" from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge.id=t2.id"+
" where t1.time>= :monthtime";
那个t2 !=null是不对,但是现在还是不行啊~~~~(>_<)~~~~
starseeker7 2010-02-09
  • 打赏
  • 举报
回复
或者你再先尝试下 把:monthtime 替换成一个固定时间的字符看会报错不- -
这样刷网页好痛苦,,有QQ吗?
fyjin99 2010-02-09
  • 打赏
  • 举报
回复
是查询语句本身不对,不是执行语句出错,我是用hibernate输出sql执行语句的,执行语句还没有输出,说明没有产生真正的sql语句。给出的出错信息也是:
org.hibernate.hql.ast.QuerySyntaxException
fyjin99 2010-02-09
  • 打赏
  • 举报
回复
帮忙啊!也让小弟过个好年啊!!!
starseeker7 2010-02-09
  • 打赏
  • 举报
回复
为什么要判断
t2!=null呢?
t2是个表的别名啊
starseeker7 2010-02-09
  • 打赏
  • 举报
回复
额,我这里没有你那边的环境- -
没有办法直接测试罗,,,
我这个SQL语句是针对MSSQL写的
难道说你的环境里面不支持update 使用from吗?
你只有多调试下了- -
fyjin99 2010-02-09
  • 打赏
  • 举报
回复
换成了inner join也不行啊。
String q = "update Userexpands set sentcount=t2.sent, sent=t2.expand"+
" from Userexpands as t1 inner join Usercharge as t2 on t1.usercharge.id=t2.id"+
" where t1.time>= :monthtime and t2 !=null";
starseeker7 2010-02-09
  • 打赏
  • 举报
回复
因为如果存在
userexpands 表有
而usercharge 不存在,,且又满足 time>mytime
那些字段会因为没有对应的需要的填充的usercharge资料,全部被update成null
加载更多回复(11)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧