免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1199 | 回复: 3
打印 上一主题 下一主题

关于update的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-16 12:58 |只看该作者 |倒序浏览
表CPRIZE 的主键是badge
请看下面2个语句
UPDATE CPRIZE c SET c.DIRECSTD=
            (SELECT SUM(a.DIRECSTD) FROM CPRIZETWO a WHERE a.badge=c.badge)
          WHERE EXISTS (SELECT 1 FROM CPRIZETWO a WHERE a.badge=c.badge);

UPDATE CPRIZE c SET c.DIRECSTD=
            (SELECT SUM(a.DIRECSTD) FROM CPRIZETWO a WHERE a.badge=c.badge)
WHERE EXISTS (SELECT SUM(a.DIRECSTD) FROM CPRIZETWO a WHERE a.badge=c.badge);

原以为是一样的,运行的结果出乎意料
第二个语句居然跟下面语句一个效果,昏倒!
UPDATE CPRIZE c SET c.DIRECSTD=
            (SELECT SUM(a.DIRECSTD) FROM CPRIZETWO a WHERE a.badge=c.badge);

居然把cprize 中有而CPRIZETWO 中没有的人的DIRECSTD全部置空了
还请高手指点迷津
看了请顶一下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-12-16 13:01 |只看该作者
CPRIZETWO中的DIRECSTD是不是可以为NULL的,如果是的,而且实际记录中SUM出来也有NULL的,那么问题就在这里了

论坛徽章:
0
3 [报告]
发表于 2005-12-16 14:50 |只看该作者
不是这样的,CPRIZETWO中的DIRECSTD是不可以为NULL的!
CREATE TABLE CPRIZETWO (
   BADGE     VARCHAR2 (5)  NOT NULL,
  DIRECSTD  NUMBER (9,2)  NOT NULL,
  REMARK    VARCHAR2 (50))

这么说吧
cprize表有三条数据  
badge  DIRECSTD
1            500
2            null
3            null
而CPRIZETWO有2条数据
badge  DIRECSTD
2            100
3             200
运行的结果是 cprize表的数据为
badge  DIRECSTD
1            null
2            100
3            200
不信可以试试看!怪哇?

论坛徽章:
0
4 [报告]
发表于 2005-12-20 12:49 |只看该作者
自己顶一下!请大家也顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP