SQL - Eliminar Registros Diferentes

 
Vista:

Eliminar Registros Diferentes

Publicado por lilith (14 intervenciones) el 30/03/2010 13:36:48
Hola a todos, tengo un problema que no sé bien como resolver:

tengo 2 tablas con campos claves combinados (formados por al menos 3 campos de la tabla)

Tabla Profesorado Tabla Cursos
@anioCurso @anioCurso
@colegio @colegio
@idProfesor @tipoCurso
idProfesor

necesito eliminar los registros (aniocurso + colegio + idPreofesor) de la tabla Profesorado que no estén igual en la tabla Cursos

El problema es que no se ha controlado el borrado en cascada y se han quedado datos colgados que tengo que localizar..... pero con claves tan enrevesadas no sé muy bien cómo hacer para conseguir los registros de una tabla que no están en la otra.

ALguien puede echarme un cable o al menos darme alguna pista? muchisimas gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Eliminar Registros Diferentes

Publicado por Leonardo Josue (1173 intervenciones) el 30/03/2010 23:24:46
Buenas tardes Lilith:

He intentado por un buen rato dar con una consulta que te pueda ayudar a hacer la eliminación, pero hasta ahora no he dado con ella.

Suponiendo que la tabla Profesorado tenga la siguiente estructura:

Profesorado
@anioCurso|@colegio|@idProfesor

y que la tabla cursos tenga la siguiente estructura
Cursos
@anioCurso|@colegio|@idProfesor|@tipoCurso

Entonces puedes encontrár qué registros de la tabla Profesorado no tienen un registro asociado en la tabla Cursos:

select * from Profesorado
except
select a.* from Profesorado a
inner join Cursos b on
b.anioCurso = a.anioCurso and
b.colegio = a.colegio and
b.idProfesor = a.IdProfesor

Lo único que se me ocurre ahora es que con esta consulta hagas un cursor para ir eliminando cada uno de los registros. La sintaxis es válida para SQL Server, si estás utilizando algún otro manejador tendrías que encontrar su equivalente.

Si encuentro algúna otra forma de resolver este problema pues lo publico el día de mañana... de igual manera te pido que compartes con el foro cómo resolviste finalmente este problema.

Saludos.
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Eliminar Registros Diferentes

Publicado por lilith (14 intervenciones) el 31/03/2010 08:43:23
HOla a todos de nuevo. Lo primero MIL GRACIAS por la ayuda. Bueno, buscando por internet encontré esta sentencia, que aparentemente me ha hecho bien la selección de los registros.... , he visto que los registros devueltos son los que busco.

SELECT PROFESORADO.*
FROM PROFESORADO
WHERE NOT EXISTS (SELECT 1
FROM CURSOS
WHERE CURSOS.ANIOCURSO= PROFESORADO.ANIOCURSO
AND CURSOS.COLEGIO = PROFESORADO.COLEGIO)

el tema era que seleccionara los profesores que estén en una tabla en un determinado curso, pero en la otra tabla en el mismo curso, no tenga profesor asignado o no sea el mismo.

En fin... espero que os sirva a los que queráis hacer lo mismo. Gracias por la ayuda Leonardo. :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar