2012-07-16 12 views
7

Estoy tratando de unir tres tablas dentro de una declaración de actualización, pero hasta ahora no he tenido éxito. Sé que esta consulta funciona para unir dos tablas:Unir varias tablas dentro de una declaración de actualización

update table 1 
set x = X * Y 
from table 1 as t1 join table 2 as t2 on t1.column1 = t2.column1 

Sin embargo, en mi caso, tengo que juntar tres mesas así:

update table 1 
set x = X * Y 
from table 1 as t1 join table 2 as t2 join table3 as t3 
on t1.column1 = t2.column1 and t2.cloumn2 = t3.column1 

no funcionará. También intenté la siguiente consulta:

update table 1 
set x = X * Y 
from table 1, table 2, table 3 
where column1 = column2 and column2= column3 

¿Alguien sabe de un método para lograr esto?

+1

Qué tabla no Y viene? –

Respuesta

14

Definitivamente no desea utilizar la sintaxis table, table, table; here's why. En cuanto a la muestra del código del medio, la sintaxis de unión sigue aproximadamente las mismas reglas para SELECT que para UPDATE. JOIN t2 JOIN t3 ON ... no es válido, pero JOIN t2 ON ... JOIN t3 ON es válido.

Así que aquí es mi propuesta, a pesar de que debería actualizarse para calificar totalmente y donde proviene:

UPDATE t1 
    SET x = x * y -- should either be t2.y or t3.y, not just y 
    FROM dbo.table1 AS t1 
    INNER JOIN table2 AS t2 
    ON t1.column1 = t2.column1 
    INNER JOIN table3 AS t3 
    ON t2.column2 = t3.column1; 
+0

Gracias, esto lo hizo por mí. – Rick

Cuestiones relacionadas