如何使用where子句从另一个表修改sql表?

时间:2013-02-28 10:15:29

标签: sql sql-server sql-server-2008 tsql

我想更新test1表格的某些行。 test1中ColumnC为零。

例如:

ColumnA是父节点。 ColumnA + ColumnB是主键。

create table test(ColumnA int,  ColumnB int,  ColumnC int);
Insert Into test Values(1, 10,0);
Insert Into test Values(2, 11,0);
Insert Into test Values(3, 14,0);

create table test1(ColumnA int,  ColumnB int,  ColumnC int);
Insert Into test1 Values(1, 9,123);
Insert Into test1 Values(1, 10,0);
Insert Into test1 Values(2, 10,128);
Insert Into test1 Values(2, 11,0);
Insert Into test1 Values(3, 13,145);
Insert Into test1 Values(3, 14,0);

我想要的结果:

enter image description here

我的工作代码不正确:

update test1 a 
set a.ColumnC = b.ColumnC
from test1 as b where convert(nvarchar,b.ColumnA)+
convert (nvarchar,b.ColumnB)in(select
convert(nvarchar,c.ColumnA)+
convert (nvarchar,c.ColumnB)  ColumnC  
from test as c);
select * from test1

我该怎么做?

2 个答案:

答案 0 :(得分:5)

试试这个:

update a set a.ColumnC=b.ColumnC


from test1 a 
inner join test1 b
on b.ColumnA=a.ColumnA and b.ColumnC!=0
and a.ColumnC=0;


select * from test1;

SQL Fiddle

答案 1 :(得分:1)

如果要更新表test1,则必须在where子句中。