`

DB2用一张表更新其他表的数据

阅读更多
表结构:
CREATE TABLE ATEST
 (ID    INTEGER,
  NAME  VARCHAR(256),
  CODE  INTEGER,
  NAME2 VARCHAR(256)
 )

CREATE TABLE BTEST
 (ID    INTEGER,
  CODE  INTEGER
 )

CREATE TABLE CTEST
 (ID    INTEGER,
  NAME  VARCHAR(256),
  NAME2 VARCHAR(256)
 )

SQL语句:
一张表更新另一张表的字段:
update atest
set atest.name=(select ctest.name from ctest where atest.id = ctest.id)
where atest.id in  (select ctest.id from ctest);

两张表关联更新另一张表的字段:
update atest
set (name,name2) = (SELECT CASE WHEN CTEST.NAME IS NULL THEN ATEST.NAME ELSE CTEST.NAME END, CASE WHEN CTEST.NAME2 IS NULL THEN ATEST.NAME2 ELSE CTEST.NAME2 END FROM BTEST LEFT JOIN CTEST on BTEST.ID = CTEST.ID  WHERE atest.CODE = BTEST.CODE)
WHERE atest.CODE IN (SELECT BTEST.CODE FROM BTEST);


另外一个: http://blog.csdn.net/Bobwu/archive/2009/01/13/3768636.aspx
1.
declare
cursor t1 is select * from tablename;
begin
for rec in t1 loop
update tablename t set t.detail=rec.jieshao where t.objectid=rec.objid;
end loop;
end; 

2.

update   student   set   (name,id   )=   
  (select   name   ,id     from   (select   student.rowid   rd,student1.name,student1.id   from   student1,student   where   student1.int_id   =student.int_id)   tmp   
  where   student.rowid=tmp.rd);   
  commit; 

3.

update test_a a set (a.name,a.age)=
(select b.name,b.age from test_b b where a.id = b.id) where exists
(select * from test_b c where c.id=a.id)

4.

UPDATE   t_A   SET   Djrq=     
  (   
          SELECT   djrq   FROM   t_B   WHERE   t_A.ID   =   T_B.ID     
          WHERE   ROWNUM   =   1     
  )   
  WHERE   t_A.ID   IN     
  (   
          SELECT   ID   FROM   t_B   WHERE   jwh='XX村'   
  ) 

5.

update tbl1 a
   set (a.col1, a.col2) = (select b.col1, b.col2
                              from tbl2 b
                              where a.key = b.key)
   where a.key in(select key from tbl2)

 

 

 

 

MERGE INTO test1 a
  USING all_objects b
    ON (a.object_id = b.object_id)
  WHEN MATCHED THEN
    UPDATE SET a.status = b.status
  WHEN NOT MATCHED THEN
    INSERT (object_id, status)
    VALUES (b.object_id, b.status); 


   update account
      set firstname = (select max( firstname) from account where userid = 'ACID')
    where userid = 'j2ee'


这是一个经典的问题,太多的理论不说了,我直接举个例子吧。

两张表T_USER(用户信息表),T_NAME_MAP(新老姓名映射表)

T_USER的字段:USER_ID,USER_NAME,USER_INFO;
T_NAME_MAP的字段:USER_ID,NEW_NAME;

具体语句:
UPDATE T_USER A SET A.USER_NAME = (SELECT B.NEW_NAME FROM T_NAME_MAP B WHERE A.USET_ID = B.USER_ID)
WHERE EXISTS (SELECT 1 FROM T_NAME_MAP C WHERE A.USER_ID = C.USER_ID );

特别提醒:
1、如果T_USER表中的一个USER_ID在T_NAME_MAP 表中存在两条以上的记录,则该语句会报错。因为Oracle是无法辨别你要“更新”哪一条的。当然,从纯技术的角度来看,这种情况也是可以处理的,你可以在B.NEW_NAME 上加一个函数,如MAX(B.NEW_NAME ).
2、WHERE EXISTS 语句绝对不可以省略,有了这个子句,才能实现“一对一”的批量更新,否则会报错“返回多行”了。

以上,希望可以对你有所帮助,共同提高

 

 

分享到:
评论

相关推荐

    db2数据的一些限制

    - **解释:** 当执行数据的插入或更新操作时,可以使用的主机变量总字节数被限制在 32767 字节之内。 #### 其他限制 - **SQL 语句的最大长度:** 一个 SQL 语句的最大长度不超过 65535 字节。 - **选择列表中最大的...

    用一条SQL语句将数据表中某列更新到另一个数据表里

    即对于表T1中的每一行,如果存在匹配的表T2中的行,则更新表T1中的相应字段。这种方式虽然简单直接,但效率较低,尤其是当表中数据量较大时。例如,以下是一些常规的更新语句示例: ```sql UPDATE T1 SET A2 = 3 ...

    如何操作Excel读取数据导入DB2数据库

    3. 读取工作表数据:使用HSSFSheet对象获取工作表中的行和列数据,例如使用getLastRowNum()方法获取工作表中的行数,然后使用for循环迭代读取每一行数据。 技术要点2:DB2数据库连接和SQL执行 DB2是IBM公司开发的...

    db2导入文本数据的方法

    - 查询一张表以确认数据的准确性:`select * From TBL_IPLOCK`。 ##### 2.7 更新应用程序堆大小 - **步骤7**:为了提高数据库性能,特别是存储过程的执行效率,可以考虑更新应用程序堆大小。 - 执行命令:`db2 ...

    DB2游标及动态SQL

    #### 一、DB2游标概念与使用 **1.1 游标简介** 在DB2中,游标是一种用于遍历查询结果集的强大工具。它允许用户一行一行地处理数据,这对于需要逐行处理数据的应用场景非常有用。游标通常用于以下几种情况: - 需要...

    数据业务工程师DB2入门指南

    - Oracle的表空间数据文件通常较小且数量较多,而DB2则倾向于使用较大的数据文件。 - **1.5.3 数据库使用内存的差异** - Oracle和DB2在内存管理机制上有明显的区别,Oracle更侧重于动态调整内存使用量,而DB2则...

    DB2指标判断

    值得注意的是,一个EXTENT在同一时间只能由一张表使用,不能共享。 5. **数据页**:数据页是DB2中最小的数据存储单位,是数据在物理磁盘上的基本存储形式。每个数据页通常大小固定,如4KB或8KB等。 #### 三、容器...

    DB2数据库分区DPF

    col2 SMALLINT NOT NULL, col3 CHAR(10), PRIMARY KEY(col1, col2)) IN tbsp1 DISTRIBUTEBY HASH(col1)`:创建一张名为`table1`的表,并指定其存储在表空间`tbsp1`中,数据按照`col1`列进行哈希分布。 5. **服务...

    加;后的db2初始化脚本

    DB2是一个广泛使用的、高性能的关系型数据库管理系统,它支持SQL语言进行数据操作。在数据库初始化或配置过程中,脚本通常用于执行一系列创建表、设置权限、导入数据等任务。然而,分号在SQL语句中用作命令终止符,...

    DB2数据库SQL语法(DDL,DML以及插入优化)

    FROM another_table`:通过查询另一张表插入数据。 2. 查询资料: - 基本查询:`SELECT column1, column2,... FROM table_name`。 - 子查询:可以在`SELECT`语句中嵌套`SELECT`语句,用于从多个源获取数据。 3....

    ibm数据库管理资料db2资源锁管理

    1. **数据更新失败**:当多个事务尝试同时修改同一行数据时,为了避免数据冲突,DB2会自动锁定该行数据,直到其中一个事务完成更新。 2. **读取未提交的数据**:为了避免用户读取到其他事务尚未提交的数据,DB2会...

    DB2操作指南及命令大全 .doc

    - **作用**: 更新表上的统计信息,帮助优化查询计划。 - **示例**: 更新`tb1`表上的统计信息。 **42. 备份数据库test** - **命令**: `db2backup db test` - **作用**: 创建指定数据库的完整备份。 - **示例**: 创建...

    db2命令大全

    16. **插入数据到另一张表** - **命令**: `#db2 "insert into t1 select * from t2"` - **功能**: 将`t2`表中的所有数据插入到`t1`表中。 - **参数**: - `t1`: 目标表。 - `t2`: 数据源表。 17. **查询数据** ...

    IBM_DB2通用数据库SQL入门

    - **插入数据**:使用INSERT INTO语句向表中插入新的数据行。 - **更新数据**:UPDATE语句用于修改表中的现有数据。 - **删除数据**:DELETE语句用于从表中删除数据行。 ### 6. 数据查询语言(DQL) - **SELECT语句*...

    基于数据仓库的广东省高速公路一张网过渡期通行数据及异常分析系统

    数据仓库的生成涉及到从操作型环境(如DB2数据库服务器)中抽取数据,并加载到数据仓库(如MS SQL SERVER服务器)。这一步骤通常需要编写接口程序,确保数据的准确传输和转换。 最后,数据仓库的数据导出与展现环节...

    本文档的知识和操作基本上基于DB2数据库

    在本文档中,我们将深入探讨基于 DB2 的一系列数据库操作,包括数据库的基本操作、表的操作、数据操作与事务处理、内置函数、多表查询、子查询以及其他的数据库对象,如视图、索引、序列,以及存储过程和触发器。...

    大型机培训资料系列之DB2-book(中文).pdf

    - **定义**:视图是一种虚拟表,其内容由存储在另一张表中的数据通过 SELECT 语句来定义。 - **作用**: - 简化复杂的查询语句。 - 保护数据,通过只暴露特定的数据子集给用户。 - 提高数据的一致性和安全性。 #...

    Itrenzheng IBM DB2 000-734认证题库

    在DB2中,创建分区表时需要明确指定如何进行数据分区以及数据如何组织。在这个问题中,我们需要创建一个按照C1列进行范围分区的表,且每三个月为一个分区。同时,对于每个分区内的数据,我们希望基于C2和C3列进行...

    DB2 并发机制表格分析法

    假设我们有两个事务,事务A和事务B,它们分别对同一张表中的某些行进行操作: 1. **事务A**:获取了表中某一行的共享锁(`S`)。 2. **事务B**:尝试获取同一行的互斥锁(`X`)。 在这种情况下,事务B将无法成功获取锁...

Global site tag (gtag.js) - Google Analytics