2012-03-06 11 views
242

Tengo la siguiente consulta que no funciona. ¿Qué estoy haciendo mal? ¿Esto es posible?SQL Server - unión interna al actualizar

UPDATE ProductReviews AS R 
    INNER JOIN products AS P 
     ON R.pid = P.id 
SET R.status = '0' 
WHERE R.id = '17190' 
    AND P.shopkeeper = '89137' 
+0

dbo.ProductReviews Update como R SET R.status = '0' INNER JOIN dbo.products como P EN R.pid = P.id WHERE R.id = '17190' Y P.shopkeeper = '89137'; – Hassan

+0

Esto no es un duplicado porque no está tratando de actualizar una tabla FROM another. Él solo se está uniendo para hacer cumplir la cláusula where. – nuander

Respuesta

539
UPDATE R 
SET R.status = '0' 
FROM dbo.ProductReviews AS R 
INNER JOIN dbo.products AS P 
     ON R.pid = P.id 
WHERE R.id = '17190' 
    AND P.shopkeeper = '89137'; 
+0

¿me puede explicar por qué la sintaxis funciona igual? ACTUALICE UNIRSE A UN SET DONDE es incorrecto, pero funciona con UDPATE SET FROM JOIN WHERE? ¿Depende de la versión de mysql? – Farside

+1

@Farside esta sintaxis es para SQL Server. Alguien más tendrá que ayudarlo con la sintaxis de MySQL, lo siento. –

+0

Muchas gracias –

42

Esto debería hacerlo:

UPDATE ProductReviews 
SET ProductReviews.status = '0' 
FROM ProductReviews 
     INNER JOIN products 
     ON ProductReviews.pid = products.id 
WHERE ProductReviews.id = '17190' 
     AND products.shopkeeper = '89137' 
+0

esto me da 'ERROR: nombre de tabla" ProductReviews "especificado más de una vez' en postgresql –

+1

lo arregló haciendo' FROM ProductReviews AS pr' también 'SET status = '0'' en lugar de' ProductReviews.status =' 0'' –

+2

@JohhanSantana Esta pregunta fue etiquetada como servidor SQL, no hay garantía de que funcione en otros sistemas DBMS. – Bridge

Cuestiones relacionadas