Update con where x = select()

Trataré de explicar de acuerdo amis limitantes Mi problema es el siguiente:
Tengo 2 tablas t1 y t2 ambas con la misma estructura que es de dos campos
campo 1 varchar2, campo2 numérico con los siguientes valores
t1 t1
Nom Val Nom Val
a 7 b 5
A 1
Lo que quiero es actualizar la tabla t1 pero que me deje el valor que esta en la tabla t2 donde t1.nom = t2.nom
update t1 set t1.val = t2.val where t1.nom = t2.nom;
No lo quiero hacer como um procedimiento almacenado

5 respuestas

Respuesta
1
- Pues verás, eso lo tienes que hacer de la siguiente manera:
Update t1 set campo = (select campo from t2 where t1.campo = t2.campo);
Prueba esto pero el problema es si te devuelve más de un registro. En ese caso, tendrás que igualar el campo de t1 a un valor fijo y no de un join a otra tabla.
Respuesta
1
Perdona la tardanza, aquí esta tu solución:
UPDATE t1
SET Val =
(SELECT Val
FROM t2,t1
WHERE t2.Nom=t1.Nom );
Debes asegurarte que la subconsulta devuelve un único valor.
No es necesario hacerlo con un procedimiento almacenado, simplemente incluyendo está sentencia en código.
Respuesta
1
Tu lo que quieres es actualizar un campo de una tabla con el campo de la otra verdad,¿...?
Para esta actualización debe hacer un update con un subquery de esta forma :
update t1 set t1.campo2=(select campo2
from t2
where t1.campo1=t2.campo1);
NOTA: el campo1 en las dos tablas debe ser único porque si es lo contrario sacaría error...!
Respuesta
1
Abres sql*plus
Y escribes
Declare cursor cq is
select t1.nom Nombre1,t1.val Valor1,t1.rowid clave1, t2.nom Nombre2,t2.valor2
from tabla1 t1, tabla2 t2
where t1.nom = t2.nom;
begin
for c in cq loop
update t1 set val = c.valor2
where rowid = c.clave1;
end loop;
end;
/
Con este pequeño codigo de pl conseguiras lo que pretendes, verifica que este ON antes de realizar Commit;
Un saludo pregunta de nuevo si tienes dudas
Pero lo quiero hacer sin utilizar cursores ni hacer procediminetos.
solo update
Te los agradecería mucho
La mejor forma de realizarlo es como te indique.
Un update se realiza de una tabla no de un join
Para poder realizarlo de un join puedes intentar crearte una vista con las dos tablas y posteriormente actualizar la vista.
Tambien puedes realizar un update intenta con realizarlo a partir de una select.
No se me ocurren más cosas
Respuesta
Tu requerimiento no se puede hacer con SQL, debes implementar PL/SQL.
Una sola funcionsita o simplemente un cursor...
Este podría ser
Declare
CURSOR cur
IS
SELECT a.ROWID rid, a.cod cod, b.nombre nombre
FROM t1 a, t2 b
WHERE a.cod = b.cod;
BEGIN
FOR i IN cur
LOOP
UPDATE t1
SET nombre = i.nombre
WHERE ROWID = i.rid;
END LOOP;
END;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas