2010-08-27 8 views
0

Ce pseudo-code (SQL inexact) montre ce que je veux faire.Mettre à jour plusieurs colonnes sur plusieurs lignes dans une instruction 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 

Comment puis-je faire cela d'une manière syntaxiquement correcte?

+0

Pourquoi avez-vous de le faire dans une requête? comme vous pouvez le voir ici http://msdn.microsoft.com/en-us/library/aa260662%28SQL.80%29.aspx Vous ne pouvez pas mettre à jour 2 champs pour 2 tables séparées dans une requête (peut-être si vous essayez de jouer avec des vues mais je ne vois toujours pas pourquoi). –

+0

Je n'ai pas à le faire, mais j'essaie de mettre à jour> 100 champs de sorte qu'il serait beaucoup plus rapide de le mettre à jour dans une requête que dans de nombreuses requêtes. – dmr

Répondre

2

Quelque chose comme ceci:

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.