Consulta SQL Actualizar campos

Estoy intentado hacer una consulta con los siguientes datos.
BBDD: Base1
Tabla: Tabla1
Campo: id_recurso
La cosa es actualizar los elementos con id_recurso=38 a id_recurso=39.
El problema es que muchos elementos (no todos) tienen ambos recursos ya asignados (pueden tener de 1 a n recursos asignados) y esto debe quedarse así. El cambio solo debe afectar a los elementos que tienen 38, valor que se actualizará a 39. Si tienen valor 38 y 39 no deben modificar su campo 38.
Con esta sentencia se muestran los elementos que están en ambos casos (solo recurso 38 o recursos 38 y 39)
select *
from Tabla1
where id_recurso=38 or id_recurso=39
order by id_elemento
Esta es la sentencia update que había utilizado inicialmente pero claro, me devolvía un error de duplicidad porque al cambiar elementos con ambos recursos (38 y 39) el mismo locutorio se quedaba con valor 39, 39 lo cual no es posible ni correcto.
use Base1
update Tabla1
set id_recurso=39
where id_recurso=38
Imagino que en el where habría que meter alguna condición que excluyera aquellos elementos con recurso 38 y 39 ya asignado y es ahí donde me quedo bloqueado.

1 respuesta

Respuesta
1
guillermo en tu consulta con where id_recurso = 38 or id_recurso = 39 solo estas listando los que tiene 38 "O" 39. primero debes identificar que Elementos tienen ambos Recursos para eso puedes hacer esto:
Select Elemento, count(id_recurso) as numero 
into #mitabla
from tabla1 where id_recurso in (38, 39)
group by Elemento having count(id_recurso) = 2;
Esto te listara los elementos que contengan los 2 recursos por la clausula having y lo almacenra en una tabla temporal "#mitabla"
update tabla1 set id_recurso = 38 where (tabla1.elemento not in (select elmento from #mitabla) ) and tabla1.id_recurso = 38;
Lo que hace en el where es primero quita los elementos que tuvieron dos recurso, de los que quedan pregunta si es recurso 38

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas