Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/10/2009, 09:48
Avatar de abmptc
abmptc
 
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Hola,

Os añado el enunciado íntegro del ejercicio en las siguientes imágenes:

img25.imageshack.us/img25/4122/0aprdudacon4select1.jpg
img11.imageshack.us/img11/2423/0aprdudacon4select2.jpg
img269.imageshack.us/img269/7083/0aprdudacon4select3.jpg

Bien, “creo” que ya he conseguido entender la diferencia entre estas Select. Y estoy de acuerdo en que la respuesta correcta es la b). Voy a intenar explicar mis conclusiones:

Una parte del Where es constante para todos los casos: p.ffin is null por lo que no nos plantea problemas.
Esta condición se pone porque si p.ffin tuviera alguna fecha significaría que ese puesto esta cerrado.

Bien, para explicar el problema podríamos centrarnos en 2 partes:

1ª parte: o.titualciones
1.a) p.npt =o.npt and o.titulacion <>'010'
1.b) p.npt not in (select o.npt from titulaciones o where o.titualciones='010')
En la opción 1.a Estaríamos seleccionando todos los puestos cuyas titulaciones sean distintas de 010. Pero hay puestos que no tienen titulación, por lo que la 1.a estaría mal al no coger los puestos para los que no existe titulación.

2ª parte: a.fces
2.a) p.npt not in (select npt from actividad a where a.npt=p.npt and a.fces is null)
2.b) from puesto p, actividad a where p.npt=a.npt and a.fces is not null
Según el enunciado un puesto puede tener varias actividades. Un puesto esta vacante si TODAS sus actividades tienen alguna fecha en fces, en cuanto alguna actividad tenga este campo a null, el puesto no esta vacante. La opción 2b sería incorrecta ya que generaría para cada puesto varias líneas en el resultado final (una por cada actividad en la cual fces no sea nula), y para un puesto en el resultado final solo puede haber como mucho una línea.

“Creo” que esto explica la solución correcta. Os agradecería que comentarais tanto si estáis de acuerdo con este razonamiento como si veis alguna cosa con la que no estéis de acuerdo.

Un saludo.