bindot
今天遇到一个客户的数据更新问题,两个相关联的表,一个主表用于保存单据主要信息,一个副表用于保存单据的明细信息;现在要把主表的其中一个字段的数据更新到副表的一个字段中保存。精通的SQL语法的,当然是很简单了。下面我作个详细的说明。

假设A表是主表,有单号order_id、开单人operator、开单日期oper_date、备注memo等;B表是副表,有单号order_id、序号id、商品编码code、商品名称name、备注memo等。A表的备注是有数据的,B表的备注没有数据,现在要把A表的数据更新到B表,并且B表有数据的不能更新了。A表与B表是以单号来关联的。更新数据的SQL语法如下:
update  B  set B.memo=A.memo  from  B,A
where A.order_id=B.order_id and (B.memo is null or B.memo=\'\');

A、B表的order_id是索引,而且是关联字段,所以要放在Where条件作为第一条件。B表的备注为空值,或等于没有值的,才能更新。
--------------------------
示例查询:
SELECT TOP 10 A.F_DATE,B.F_DATE  FROM M..C1T06 A, M..C1T15 B WHERE 
A.F_CODE=B.F_CODE AND A.F_CQRQ =B.F_CQRQ AND B.F_DATE IS NULL 
示例更新:
UPDATE B SET B.F_DATE=A.F_DATE FROM C1T06 A, C1T15 B WHERE 
A.F_CODE=B.F_CODE AND A.F_CQRQ =B.F_CQRQ AND B.F_DATE IS NULL 

 

-----------------------------------------------------------

 

实例:

一、建立测试表
CREATE TABLE t_user (
ID int identity PRIMARY KEY,
UserID varchar(50) not null,
UserName varchar(50) null,
deptID int not null,
phone varchar(50) null,
fax varchar(50) null
)

CREATE TABLE t_dept (
ID int identity PRIMARY KEY,
DeptName varchar(50) null,
phone varchar(50) null,
fax varchar(50) null
)

INSERT t_user
SELECT N\'001\',N\'张三\',1,N\'88888001\',N\'99999001\'
UNION  ALL SELECT N\'002\',N\'李四\',2,N\'88888002\',N\'99999002\'
UNION  ALL SELECT N\'003\',N\'王五\',2,N\'88888003\',N\'99999003\'
UNION  ALL SELECT N\'004\',N\'赵六\',3,N\'88888004\',N\'99999004\'

INSERT t_dept
SELECT N\'开发部\',N\'88888011\',N\'99999011\'
UNION  ALL SELECT N\'市场部\',N\'88888022\',N\'99999022\'
UNION  ALL SELECT N\'售后部\',N\'88888033\',N\'99999033\'

二、sql更新(每次执行update后都还原t_user数据)

1、update t_user set u.phone=d.phone, u.fax=d.fax from t_user u, t_dept d where u.deptID=d.ID

报错:无法绑定由多个部分组成的标识符 "u.phone"。
2、update u set u.phone=d.phone, u.fax=d.fax from t_user u, t_dept d where u.deptID=d.ID

 

 正确

select * from t_user

 

 ID  UserID  UserName  deptID  phone  fax
 1  001  张三  1  88888011  99999011
 2  002  李四  2  88888022  99999022
 3  003  王五  2  88888022  99999022
 4  004  赵六  3  88888033  99999033

 

 

3、update t_user u set u.phone=d.phone, u.fax=d.fax from t_dept d where u.deptID=d.ID

报错:\'u\' 附近有语法错误。

4、update t_user set phone=d.phone, fax=d.fax from t_dept d where deptID=d.ID

正确,结果同2

 

转载自:http://blog.csdn.net/leamonjxl/article/details/6441669

分类:

技术点:

相关文章:

  • 2021-11-04
  • 2021-10-20
  • 2021-11-04
  • 2021-11-30
  • 2021-06-27
  • 2022-12-23
  • 2022-12-23
  • 2021-10-20
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-08
  • 2021-12-13
  • 2021-11-09
相关资源
相似解决方案