as400 update语句 问题

1、************************************************我新建了两张物理表,tab_1,tab_2,其中它们的数据分别为tab_1------------------------------------bm   mc          value1     value201  &nbs...显示全部
1、************************************************
我新建了两张物理表,tab_1,tab_2,其中它们的数据分别为
tab_1
------------------------------------
bm   mc          value1     value2
01   01编码        0          0
02   02编码        0          0
03   03编码        0          0
------------------------------------
tab_2
------------------------------------
bm   mc          value1
01   01编码        100         
------------------------------------
2、************************************************
然后我使用update语句
update tab_1 a set value1 = (select value1 from tab_2 b where a.bm=b.bm);
3、************************************************
可是最后查询结果却是这样
select * from tab_1;
tab_1
------------------------------------
bm   mc          value1     value2
01   01编码        100         0
02   02编码         -          0
03   03编码         -          0
------------------------------------
为02,03编码的value1值变成空值了。
select * from tab_1 where value1 is null;
tab_1
------------------------------------
bm   mc          value1     value2
02   02编码         -          0
03   03编码         -          0
------------------------------------收起
参与10

查看其它 6 个回答anliguo的回答

anliguoanliguo数据库管理员NEW COM
idkjyold#/db2aix/iprocess$db2expln -d sample -q "update tab_1 a set value1 = (select value1 from tab_2 b where a.bm=b.bm)" -g  -t

DB2 Universal Database Version 9.5, 5622-044 (c) Copyright IBM Corp. 1991, 2007
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

DB2 Universal Database Version 9.5, 5622-044 (c) Copyright IBM Corp. 1991, 2007
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

******************** DYNAMIC ***************************************

==================== STATEMENT ==========================================

        Isolation Level          = Cursor Stability
        Blocking                 = Block Unambiguous Cursors
        Query Optimization Class = 5

        Partition Parallel       = No
        Intra-Partition Parallel = No

        SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM",
                                   "IPROCESS"


Statement:
  
  update tab_1 a set value1 =
     (select value1
     from tab_2 b
     where a.bm=b.bm)


Section Code Page = 1208

Estimated Cost = 37.868073
Estimated Cardinality = 3.000000

Access Table Name = IPROCESS.TAB_1  ID = 3,65
|  #Columns = 1
|  Relation Scan
|  |  Prefetch: Eligible
|  Lock Intents
|  |  Table: Intent Exclusive
|  |  Row  : Exclusive
Nested Loop Join
|  Piped Inner
|  Access Table Name = IPROCESS.TAB_2  ID = 3,66
|  |  #Columns = 1
|  |  Evaluate Block/Data Predicates Before Locking Committed Row
|  |  Relation Scan
|  |  |  Prefetch: Eligible
|  |  Lock Intents
|  |  |  Table: Intent Share
|  |  |  Row  : Next Key Share
|  |  Sargable Predicate(s)
|  |  |  #Predicates = 1
Update:  Table Name = IPROCESS.TAB_1  ID = 3,65

End of section


Optimizer Plan:

                 Rows   
               Operator
                 (ID)   
                 Cost   
                       
                  3   
               UPDATE  
                ( 2)   
               37.8681
              /       \
          3             3     
       NLJOIN        Table:   
        ( 3)         IPROCESS
       15.1715       TAB_1   
      /       \
     3       0.04   
  TBSCAN    TBSCAN  
   ( 4)      ( 5)   
  7.58444   7.58316
    |         |     
    3         1     
Table:    Table:   
IPROCESS  IPROCESS
TAB_1     TAB_2   

我的推断应该是对的:-)
互联网服务 · 2011-03-21
浏览1068

回答者

anliguo
数据库管理员NEW COM

anliguo 最近回答过的问题

回答状态

  • 发布时间:2011-03-21
  • 关注会员:2 人
  • 回答浏览:1068
  • X社区推广