12
返回列表 发新帖
楼主: iloveora

两表连查来更新其中一张表?

[复制链接]
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
11#
发表于 2005-3-14 17:22 | 只看该作者
最初由 rollingpig 发布
[B]有那么麻烦么?
[php]
update table_a a set cola_3 = (select count(*) from table_b b where a.cola_1= b.col1_b )
..
[/php] [/B]


不好意思,吹毛求疵了。

update table_a a set cola_3 = (select count(*) from table_b b where a.cola_1= b.col1[/COLOR]_b[/COLOR]  )
1和b的位置反了

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
12#
发表于 2005-3-14 17:23 | 只看该作者
最初由 rollingpig 发布
[B]有那么麻烦么?
[php]
update table_a a set cola_3 = (select count(*) from table_b b where a.cola_1= b.col1_b )
..
[/php] [/B]



不过,你这个才是最高效的,我写的那个完全是照搬,没动脑子。

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
13#
 楼主| 发表于 2005-3-14 17:28 | 只看该作者
唉,我得好好理解.
真是老了,这么点弯我都绕不过来啦

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
14#
 楼主| 发表于 2005-3-14 17:41 | 只看该作者

Re: Re: 两表连查来更新其中一张表?

这个语句会不会报错?
group by聚组语句,前面的co9unt(*)是不是必须有group by 的条件,就是必须写成select cola_1,count(*) from ...

最初由 yangtingkun 发布
[B]

是不是这样?

update table_a x set cola_3 =
(select count(*) from table_a a, table_b b where a.cola_1 = b.colb_1
and a.cola_1 = x.cola_1
group by a.cola_1) [/B]

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
15#
发表于 2005-3-14 17:43 | 只看该作者
最初由 yangtingkun 发布
[B]

不好意思,吹毛求疵了。

update table_a a set cola_3 = (select count(*) from table_b b where a.cola_1= b.col1[/COLOR]_b[/COLOR]  )
1和b的位置反了 [/B]

hehe
写的太快了

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
 楼主| 发表于 2005-3-14 17:44 | 只看该作者
非常感谢大家帮助,这法好!简单易懂,最适合我这懒人

最初由 rollingpig 发布
[B]有那么麻烦么?
[php]
update table_a a set cola_3 = (select count(*) from table_b b where a.cola_1= b.col1_b )
..
[/php] [/B]

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
17#
发表于 2005-3-14 20:00 | 只看该作者

Re: Re: Re: 两表连查来更新其中一张表?

最初由 yangtingkun 发布
[B]

这会把a中cola_1存在b中colb_1不存在的记录更新为null。
如果你需要将这个值设置为0。

执行
update table_a x set cola_3 =
nvl((select count(*) from table_a a, table_b b where a.cola_1 = b.colb_1
and a.cola_1 = x.cola_1
group by a.cola_1), 0)
; [/B]


换是我,我一般会update后在把null设置为默认值

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表