2011-06-13 20 views
20

Tengo dos tablas con una relación y quiero actualizar un campo en la tabla A. ¿Es posible combinar la actualización y unirse en la misma consulta? Busqué en Google pero no encontré ninguna solución de trabajo?Actualización y declaraciones de combinación externa izquierda

UPDATE md SET md.status = '3' 
FROM pd_mounting_details AS md 
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id 

estoy usando MS SQL

+0

La adición de este código indica un error, ¿qué estás uniendo a la Cruz? – JonH

+0

@JohnH Disculpe, la unión cruzada donde no estaba para estar allí, el estudio visual lo agrega automáticamente por alguna razón ... – Evilaid

+0

Acepte una respuesta ... – JonH

Respuesta

38
Update t 
SET 
     t.Column1=100 
FROM 
     myTableA t 
LEFT JOIN 
     myTableB t2 
ON 
     t2.ID=t.ID 

Reemplazar myTableA con su nombre de tabla y sustituir Column1 con su nombre de columna. Después de esto simplemente IZQUIERDA ÚNETE a la tabla B. t en este caso es sólo un alias para myTableA

+0

OK, eso es lo que probé: Me gusta: 'ACTUALIZACIÓN md SET md .status = '3' FROM pd_mounting_details AS md IZQUIERDA UNIR pd_order_ecolid AS oe ON md.order_data = oe.id' – Evilaid

+0

@Evilaid - He agregado este código a la pregunta. Ayudará a responderlo. –

+0

@Evailaid, siempre y cuando order_data sea del mismo tipo de ID de oe que no veo ningún problema. – JonH

7

Si lo que necesita es ACTUALIZACIÓN de instrucción SELECT se puede hacer algo como esto:

UPDATE suppliers  
SET city = (SELECT customers.city FROM customers 

WHERE customers.customer_name = suppliers.supplier_name) 
1

La izquierda se unen en esta consulta no tiene sentido:

UPDATE md SET md.status = '3' 
FROM pd_mounting_details AS md 
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id 

Actualizaría todas las filas de pd_mounting_details, ya sea que exista o no una fila coincidente en pd_order_ecolid. Si solo desea actualizar las filas coincidentes, debe ser una unión interna.

Si desea aplicar alguna condición basada en la unión que se produce o no, necesita agregar una cláusula WHERE y/o una expresión CASE en su cláusula SET.

1

Sólo otro ejemplo en el que se inserta en una columna el valor de una columna de la tabla 1 en la tabla 2:

UPDATE Address 
SET  Phone1 = sp.Phone 
FROM Address ad LEFT JOIN Speaker sp 
ON  sp.AddressID = ad.ID 
WHERE sp.Phone <> '' 
Cuestiones relacionadas