[MSSQL] kraje z których nigdy nie zamówiono produktów

0

Witam, jak w temacie mam problem z napisaniem zapytania do zadania : Podać kraje z których nigdy nie zamówiono produktów z wybranej kategorii. Kategoria ma być podawana w zapytaniu, więc musi to być zrobione jako procedura. Zrobiłem procedure która pokazuje kraje z których te produkty były zamawiane, lecz nie wiem jak zmienić ją żeby pasowała do właściwej treści. Prosze o pomoc ;)

create procedure kraje(@kategoria as nvarchar(20))
as
Select distinct C.categoryname, CU.country
from Categories C join Products P on 
	C.CategoryID = P.CategoryID join [Order Details] OD on
	P.ProductID = OD.ProductID join Orders O on
	OD.OrderID = O.OrderID join Customers Cu on
	O.CustomerID = Cu.CustomerID
where C.categoryname = @kategoria
order by 1, 2 
0

Tak na szybko to widzę dwa sposoby:

  1. LEFT OUTER JOIN do tabeli kategorii i wyświetlenie wierszy z NULL.
  2. HAVING COUNT(kategoria) = 0
0

Niestety 1 metody nie rozumiem, a 2 nie działa.

0

Obie działają ziomuś... ech...

SELECT @kategoria as categoryname, CU.country
FROM Customers Cu
INNER JOIN Orders O ON O.CustomerId = Cu.CustomerID
INNER JOIN [Order Details] od ON od.OrderId = O.OrderId
INNER JOIN Products P ON P.ProductID = OD.ProductID
LEFT OUTER JOIN Categories C ON C.CategoryID = P.CategoryID AND C.categoryname = @kategoria
GROUP BY CU.country
HAVING COUNT(c.categoryID) = 0;
SELECT @kategoria as categoryname, CU.country
FROM Customers Cu
INNER JOIN Orders O ON O.CustomerId = Cu.CustomerID
INNER JOIN [Order Details] od ON od.OrderId = O.OrderId
INNER JOIN Products P ON P.ProductID = OD.ProductID
LEFT OUTER JOIN Categories C ON C.CategoryID = P.CategoryID AND C.categoryname = @kategoria
WHERE C.CategoryID IS NULL
0

Hm, to w sumie to sam zrobiłem to samo, ale myślałem że wynik wyświetlany jest błędny ;) dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1