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 > 50Jak 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.
