Я любитель SQL и мне нужна ваша помощь. После «Выбрать» в 3-м ряду я должен получить
Ivo |Ivić| NULL
но я получаю все 3 нуля. Помоги мне, где моя ошибка? Я пытался проверить мой код примерно 10 раз, но все еще не вижу проблемы.
CREATE TABLE Prijatelj
(
ID_prijatelja INT NOT NULL PRIMARY KEY IDENTITY,
ImePrijatelja NVARCHAR(30) NOT NULL,
PrezPrijatelja NVARCHAR(30) NOT NULL
)
GO
CREATE TABLE DVD
(
ID_DVD INT NOT NULL PRIMARY KEY IDENTITY,
ImeDVD NVARCHAR(50) NOT NULL
)
GO
CREATE TABLE Posudio
(
ID_prijatelja INT NOT NULL
FOREIGN KEY REFERENCES prijatelj(ID_prijatelja),
ID_DVD INT NOT NULL
FOREIGN KEY REFERENCES dvd(ID_DVD),
datumPosudbe DATETIME NOT NULL,
datumPovratka DATETIME,
CONSTRAINT PK_posudba
PRIMARY KEY (ID_Prijatelja, ID_DVD, datumPosudbe)
)
GO
ALTER TABLE Posudio
ADD CONSTRAINT CK_Posudba_prije_Povratka CHECK (datumPosudbe < datumPovratka)
INSERT INTO Prijatelj (ImePrijatelja, PrezPrijatelja)
VALUES ('Ana', 'Anić'),
('Ivo', 'Ivić'),
('Marko', 'Marić')
GO
INSERT INTO DVD (ImeDVD)
VALUES ('Avengers: Infinity War'),
('Interstellar'),
('Inception')
GO
INSERT INTO Posudio(ID_prijatelja, ID_DVD, datumPosudbe, datumPovratka)
VALUES (1, 1, '2019-01-5','2019-01-14'),
(2, 2, '2018-12-16','2019-01-8'),
(2, 3, dateadd(day, -30, getdate()), NULL)
GO
SELECT
d.ImeDVD AS 'Naziv DVD-a',
pr.ImePrijatelja AS 'Ime',
pr.PrezPrijatelja AS 'Prezime',
DATEDIFF(DAY, datumPosudbe, datumPovratka) AS 'Dana posuđen'
FROM
DVD AS d
LEFT OUTER JOIN
(SELECT *
FROM Posudio
WHERE datumPovratka IS NOT NULL) AS po ON d.ID_DVD = po.ID_DVD
LEFT OUTER JOIN
prijatelj AS pr ON po.ID_prijatelja = pr.ID_prijatelja
SELECT
pr.ImePrijatelja AS 'Ime', pr.PrezPrijatelja AS 'Prezime'
FROM
prijatelj pr
LEFT OUTER JOIN
Posudio po ON pr.ID_prijatelja = po.ID_prijatelja
WHERE
po.ID_prijatelja IS NULL
GO