De this sitio:Ayúdame a entender este uso particular de las instrucciones SELECT anidadas
Tablas:
CREATE TABLE PilotSkills
(pilot_name CHAR(15) NOT NULL,
plane_name CHAR(15) NOT NULL,
PRIMARY KEY (pilot_name, plane_name));
CREATE TABLE Hangar
(plane_name CHAR(15) NOT NULL PRIMARY KEY);
Consulta:
SELECT DISTINCT pilot_name
FROM PilotSkills AS PS1
WHERE NOT EXISTS
(SELECT *
FROM Hangar
WHERE NOT EXISTS
(SELECT *
FROM PilotSkills AS PS2
WHERE (PS1.pilot_name = PS2.pilot_name)
AND (PS2.plane_name = Hangar.plane_name)));
entiendo el problema se utiliza para la (división de conjunto) , incluida la analogía que lo describe como "¡No hay aviones en este hangar que no pueda volar!". Lo que no entiendo es exactamente lo que está en juego aquí, y cómo se une para hacer lo que dice que está haciendo.
Tiene problemas específicos que indica con mi dificultad en el momento ...
Editar: Permítanme en primer lugar pido lo menos así lo hace, exactamente
:
SELECT DISTINCT pilot_name
FROM PilotSkills
WHERE NOT EXISTS
(SELECT *
FROM Hangar)
Creo que me falta algo de comprensión fundamental aquí ...
Editar: irrelevante, y no sería significativo sin el tercer SELECT anidado, ¿verdad?
@Hamster Es posible que desee dar a la fuente para las personas poco claras sobre el ejemplo [artículo de Joe Celko aquí] (http://www.simple-talk.com/sql/t-sql-programming/ split-we-stand-the-sql-of-relational-division /). Es solo un doble negativo. 'Seleccione todos los pilotos para los que no exista un avión en el hangar que no puedan volar. ¿Qué es exactamente lo que necesita explicar? –
Sí, me he vinculado a él anteriormente. Sin embargo, la url puede ser difícil de notar ... – Hamster
Una cuestión de orden menor: las relaciones deben nombrarse según el tipo de hecho que afirman. La relación 'Hangar' debería haber sido llamada' Plane', ya que dice algo acerca de los aviones, no sobre los hangares. Tal vez JC pensó que era lindo llamar a la mesa contenedor un hangar, pero no es una práctica de diseño terriblemente buena. Es como llamar a una mesa de miembros del personal "Oficina". Además, en este caso, se suma a la confusión al implicar que hay tres tipos de entidades involucradas: pilotos, aviones * y * hangares, cuando solo hay dos. –