Zadanie (pytanie) polegało na ułożeniu zapytania z dostępnego do wyboru kodu. Zapytanie miało zwracać zwierzątka właścicieli, którzy mieszkają w Seatlle i mają powyżej 50-tki (dokładny opis na obrazku poniżej).
Niestety z dostępnego kodu nie dało się napisać zapytania. Zaciekawiło mnie więc jaka jest odpowiedź. Napisałem więc błędny kod i poprosiłem o sprawdzenie i wyświetlenie odpowiedzi. Oto co otrzymałem :
Jak można zauważyć poprawna odpowiedź jest błędna. W podzapytaniu nie ma kolumny OWNERNAME, po której następuje JOIN.
Poniżej dowód :
USE TEMPDB; DECLARE @PETS AS TABLE ( PETNAME VARCHAR(20), OWNERNAME VARCHAR(20) ); DECLARE @OWNERS AS TABLE ( OWNERNAME VARCHAR(20), AGE TINYINT, LOCATION VARCHAR(20) ); INSERT INTO @PETS (PETNAME, OWNERNAME) VALUES ('REX', 'BOB') , ('PIMPEK', 'ALA') , ('ŚLINIAK', 'OLA'); INSERT INTO @OWNERS (OWNERNAME, AGE, LOCATION) VALUES ('BOB', 55, 'SEATTLE') , ('ALA', 10, 'WARSZAWA') , ('OLA', 12, 'SZCZECIN'); SELECT PET.PETNAME FROM @PETS AS PET JOIN (SELECT AGE FROM @OWNERS WHERE LOCATION = 'SEATTLE') AS OWN ON PET.OWNERNAME = OWN.OWNERNAME WHERE OWN.AGE > 50
Jak można się domyślić zapytanie zwraca błąd :
Prawidłowe zapytanie powinno wyglądać tak :
SELECT PET.PETNAME FROM @PETS AS PET JOIN (SELECT OWNERNAME, AGE FROM @OWNERS WHERE LOCATION = 'SEATTLE') AS OWN ON PET.OWNERNAME = OWN.OWNERNAME WHERE OWN.AGE > 50
Ciekawy jestem czy Wy też trafiliście na przypadki błędnych odpowiedzi do testów dołączonych to książek przygotowujących do egzaminu.