Dacă vrei să îţi arate doar depozitele în care se găsesc toate produsele din respectiva comandă, atunci poţi folosi ceva de genul:
CREATE TABLE Depozite (ID_Depozit int PRIMARY KEY)
GO
CREATE TABLE DetaliiComanda (
ID_Comanda int,
ID_Produs int,
CantitateComanda int NOT NULL,
PRIMARY KEY (ID_Comanda, ID_Produs)
)
GO
CREATE TABLE DetaliiStoc (
ID_Depozit int REFERENCES Depozite,
ID_Produs int,
CantitateStoc int NOT NULL,
PRIMARY KEY (ID_Depozit, ID_Produs)
)
GO
INSERT INTO Depozite VALUES (1)
INSERT INTO Depozite VALUES (2)
INSERT INTO Depozite VALUES (3)
GO
INSERT INTO DetaliiComanda VALUES (1,10,100)
INSERT INTO DetaliiComanda VALUES (1,11,250)
INSERT INTO DetaliiComanda VALUES (1,12,300)
GO
INSERT INTO DetaliiStoc VALUES (1,10,10)
INSERT INTO DetaliiStoc VALUES (1,11,10)
INSERT INTO DetaliiStoc VALUES (1,12,10)
INSERT
INTO DetaliiStoc VALUES (2,10,1000)
INSERT INTO DetaliiStoc VALUES (2,11,2000)
INSERT INTO DetaliiStoc VALUES (3,10,200)
INSERT INTO DetaliiStoc VALUES (3,11,500)
INSERT INTO DetaliiStoc VALUES (3,12,3000)
DECLARE @ID_Comanda int
SET @ID_Comanda=1
SELECT ID_Depozit FROM Depozite d
WHERE NOT EXISTS (
SELECT * FROM DetaliiComanda c
LEFT JOIN DetaliiStoc s
ON c.ID_Produs=s.ID_Produs
AND s.ID_Depozit=d.ID_Depozit
WHERE c.ID_Comanda=@ID_Comanda
AND ISNULL(s.CantitateStoc,0)<=c.CantitateComanda
)
Răzvan