Ver Mensaje Individual
  #2  
Antiguo 21-11-2012
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Reputación: 17
TOPX Va camino a la fama
Hola,

No especifica el motor de base de datos que usa, pero:

Con SQL estándar, para muchos motores, podría hacer:
Código SQL [-]
UPDATE productos 
SET AnchoPap=143 
WHERE EXISTS (
  SELECT DISTINCT 1 
  FROM troqueles 
  WHERE ref = productos.ref
  AND principal=true 
  AND Troquel=2298
)
Con Firebird, también podría hacer:
Código SQL [-]
FOR
  SELECT DISTINCT ref 
  FROM troqueles 
  WHERE principal=true 
  AND Troquel=2298
INTO :ref DO
BEGIN
  UPDATE productos 
  SET AnchoPap=143 
  WHERE ref = :ref
END

Con MS Sql, también podría hacer:
Código SQL [-]
UPDATE productos 
SET AnchoPap=143 
INNER JOIN troqueles
ON productos.ref = troqueles.ref
AND troqueles.principal=true 
AND troqueles.Troquel=2298

Con (algunas versiones de) Oracle, también podría hacer:
Código SQL [-]
UPDATE (
  SELECT productos.ref, productos.AnchoPap
  FROM productos
  INNER JOIN troqueles
  ON productos.ref = troqueles.ref
  WHERE troqueles.principal=true 
  AND troqueles.Troquel=2298
)
SET AnchoPap=143

Pero siempre, siempre, se le va a demorar ese UPDATE mientras la selección de registros de la tabla productos no esté apropiadamente indexada. Desde mi humilde opinión, es la única opción.

-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita