15/06/2007, 23:03
|
| Colaborador | | Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 19 años, 6 meses Puntos: 24 | |
Re: Duda sobre consulta SQL anidada 1) Un buen diseño de aplicación no usa asteriscos en los selects. Te recomiendo que SIEMPRE especifiques los campos que quieres recuperar.
2) No se que motor de BD usas, por lo que te doy la solución en SQL estándar
(SELECT atributos_alumno FROM ALUMNOS)
MINUS
(SELECT atributos_alumno FROM ALUMNOS INNER JOIN INSCRIPCION ON ALUMNOS.id = INSCRIPCION.id_alumno)
Otra forma puede ser:
SELECT atributos_alumno FROM ALUMNOS
WHERE NOT EXISTS
(SELECT atributos_inscripcion FROM INSCRIPCION WHERE INSCRIPCION.id_alumno=ALUMNOS.id)
La primera consulta hace uso del operador minus el cual permite hacer una diferencia entre 2 conjuntos de tuplas, en este caso recupero todos los alumnos y luego le quito todos los alumnos que ya están en la tabla inscripción. El inner join es necesario para obtener los datos del alumno ya que el operador minus requiere que la estructura de las tuplas sea idéntica.
La segunda consulta es "mas típica", la cual se traduce así: "Recuperar los alumnos de la tabla ALUMNOS solo si no existe su id en la tabla inscripciones".
Te recomiendo que no uses estas consultas directamente, probablemente no anden, las escribo solo para que te des una idea de la solución. |