2010-08-27 97 views
0

这个伪代码(不准确的SQL)显示我想要做什么。在一个sql语句中更新多行中的多个列?

update tableA (colA, colB, colC, colD) 
select b.colA, b.colB, c.colC, c.colD 
from tableB b 
    left outer join tableC c 
     on b.id = c.id 
    inner join tableA a 
     on c.myNum = a.myNum 
    inner join tableD 
     on a.newId = f.newId 
where f.imported = 1 

如何以语法正确的方式做到这一点?

+0

为什么你必须做1个查询?正如你可以在这里看到的 http://msdn.microsoft.com/en-us/library/aa260662%28SQL.80%29.aspx 你不能更新2字段的2个单独的表在1查询(也许如果你尝试玩意见,但我仍然不明白为什么)。 – 2010-08-27 14:33:30

+0

我不必这样做,但我正在尝试更新> 100个字段,因此在一个查询中更新它比在许多查询中更快。 – dmr 2010-08-27 14:34:46

回答

2

事情是这样的:

UPDATE TABLE 
SET ... 
FROM Table1, Table2 .... 
WHERE ..... 


update tableA 
Set a.ColA = b.ColA, 
    a.Colb = b.ColB, 
    a.ColC = c.Colc, 
    a.ColD = c.ColD 
from tableB b 
left outer join tableC c 
    on b.id = c.id 
inner join tableA a 
    on c.myNum = a.myNum 
inner join tableD 
    on a.newId = f.newId 
where f.imported = 1 
0
SQL> select *from Dewashish84; 

E_ID E_NAME  E_EDUCATION 
---------- ------------- --------------- 

    100 dewa   MCA 
    101 Raj   MSCIT 
    145 mohan   BA 
    103 ram   MTECH 
    5 Sohan   BTECH 

SQL>

update harshad set E_NAME= decode(E_EDUCATION,'MCA','dewa','MSCIT','Raj','BA','mohan', 
    'MTECH','ram'); 

5 rows updated.