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.
-