Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta un poco compleja (excluir registros en base a un criterio de otra tabla)

Estas en el tema de Consulta un poco compleja (excluir registros en base a un criterio de otra tabla) en el foro de SQL Server en Foros del Web. Holas a todos ! Necesito hacer una consulta , que a mi parecer es un poco compleja. las tablas son las siguientes Código: alumno id_alumno ...
  #1 (permalink)  
Antiguo 04/06/2007, 12:13
Avatar de webbeginner  
Fecha de Ingreso: noviembre-2004
Mensajes: 241
Antigüedad: 20 años, 1 mes
Puntos: 2
Consulta un poco compleja (excluir registros en base a un criterio de otra tabla)

Holas a todos !

Necesito hacer una consulta , que a mi parecer es un poco compleja.

las tablas son las siguientes


Código:
alumno
id_alumno	         nombre	       apellido	
--------------------------------------------------
     1	                    Juanito	     Perez
.
.
.
.


Trabajos

id_trabajo	nombre		digito_verificador	id_alumno
----------------------------------------------------------------
12		Historio	    12			       1
13		Ciencia		    26			       1
.
.
.
Necesito hacer una consulta que me arroje UNICAMENTE alumnos y sus trabajos relacionados que no tengan en el campo "digito verificador" (de la tabla trabajos) el numero 11, todos los alumnos tienen 'n' trabajos, pero si un alumno tuviera un 11 en alguno de los trabajos EL ALUMNO NO DEBE APARECER en la consulta, ni siquiera con sus trabajos con otros numeros, es decir que con un 11 en su historial, el ALUMNO y sus TRABAJOS quedan TOTALMENTE EXCLUIDOS de la consulta

Intente algo asi

Código:
SELECT   *
FROM       alumno a INNER JOIN Trabajos t ON a.id_alumno = t.id_alumno
where digito_verificador <> 11
pero evidentemente no funciona, porque simplemente omite los registros que tienen el numero 11, pero siguen apareciendo alumnos trabajos que ya tuvieron en su historial el numero 11

se entiende la idea ?

gracias !!
__________________
************************
"La bondad es simple; la maldad, múltiple"

Última edición por webbeginner; 04/06/2007 a las 12:18 Razón: Mejorar la presentacion
  #2 (permalink)  
Antiguo 04/06/2007, 13:07
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Re: Consulta un poco compleja (excluir registros en base a un criterio de otra tabla)

Código:
Select *
From   alumno a (nolock) 
Inner join
       Trabajos t 
ON     a.id_alumno = t.id_alumno       
Left outer join
      (SELECT Id_Alumno
       FROM   Trabajos t  (nolock)
       where  digito_verificador = 11
       Group by 
              Id_Alumno) X
       a.id_alumno = x.id_Alumno
Where  x.Id_Alumno is null    -- Se obtienen todos los alumnos que no esten en X.
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 04/06/2007, 13:15
Avatar de webbeginner  
Fecha de Ingreso: noviembre-2004
Mensajes: 241
Antigüedad: 20 años, 1 mes
Puntos: 2
Re: Consulta un poco compleja (excluir registros en base a un criterio de otra tabla)

Gracias por tu ayuda,

en este momento lo voy a probar.

Una pregunta mas

para q sirve NOLOCK ?

:)
__________________
************************
"La bondad es simple; la maldad, múltiple"
  #4 (permalink)  
Antiguo 04/06/2007, 13:39
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Re: Consulta un poco compleja (excluir registros en base a un criterio de otra tabla)

Cita:
Iniciado por webbeginner Ver Mensaje
para q sirve NOLOCK ?
Uso de Nolock
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 24/06/2007, 20:34
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 18 años, 1 mes
Puntos: 6
Re: Consulta un poco compleja (excluir registros en base a un criterio de otra tabla)

Prueba esto y me cuentas...
Código:
SELECT *
FROM Alumnos A
INNER JOIN Trabajos T
    ON A.IdAlumno = T.IdAlumno
WHERE NOT EXISTS(SELECT 1 FROM Trabajos WHERE Alumno = A.IdAlumno AND DigitoVerificador = 11)
Saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:09.