Witam,

Mam problem z napisaniem zapytania, które wyciągnęło by mi wszystkie produkty przeznaczone dla danego pracownika.

Tabele do testów:


--produkty
CREATE TABLE #products
(
  ProductID INT,
  ProductName NVARCHAR(50),
  ProducerID INT

)
INSERT INTO #products (ProductID, ProductName, ProducerID) VALUES (1,'PROD1', 10)
INSERT INTO #products (ProductID, ProductName, ProducerID) VALUES (2,'PROD2', 10)
INSERT INTO #products (ProductID, ProductName, ProducerID) VALUES (3,'PROD3', 10)
INSERT INTO #products (ProductID, ProductName, ProducerID) VALUES (4,'PROD4', 20)
INSERT INTO #products (ProductID, ProductName, ProducerID) VALUES (5,'PROD5', 30)

--pracownicy
CREATE TABLE #employees
(
  EmployeeID INT,
  EmployeeName NVARCHAR(50),
)
INSERT INTO #employees (EmployeeID,EmployeeName) VALUES (1,'Tomasz')
INSERT INTO #employees (EmployeeID,EmployeeName) VALUES (2,'Zbyszek')
INSERT INTO #employees (EmployeeID,EmployeeName) VALUES (3,'Jan')
INSERT INTO #employees (EmployeeID,EmployeeName) VALUES (4,'Max')

--producenci
CREATE TABLE #producers
(
  ProducerID INT,
  ProducerName NVARCHAR(50),
)
INSERT INTO #producers (ProducerID,ProducerName) VALUES (10,'GOOGLE')
INSERT INTO #producers (ProducerID,ProducerName) VALUES (20,'APPLE')
INSERT INTO #producers (ProducerID,ProducerName) VALUES (30,'MS')

--powiązanie pracownik - producent
CREATE TABLE #emp_prod
(
  EmpProd INT,
  EmployeeID INT,
  ProducerID INT,
)

INSERT INTO #emp_prod (EmpProd,EmployeeID, ProducerID) VALUES (1,1,10)
INSERT INTO #emp_prod (EmpProd,EmployeeID, ProducerID) VALUES (2,1,20)
INSERT INTO #emp_prod (EmpProd,EmployeeID, ProducerID) VALUES (3,2,10)
INSERT INTO #emp_prod (EmpProd,EmployeeID, ProducerID) VALUES (4,3,30)

Chcąc wyciągnąć wszystkie produkty np. dla pracownika 'Zbyszek' piszę coś takiego:

SELECT 
EP.EmployeeID
,P.ProductName
,PR.ProducerName
 FROM 
 #products P 
INNER JOIN #producers PR ON P.ProducerID = PR.ProducerID
LEFT JOIN #emp_prod EP ON P.ProducerID = EP.ProducerID
WHERE EP.EmployeeID = 2

DROP TABLE #products, #employees, #emp_prod, #producers

Problem w tym, że chciałem wyciągnąć w jak najprostszy sposób też produkty wszystkich producentów dla pracownika, dla którego nie ma powiązania z producentem (tabelka #emp_prod).
Czyli np.MAX jest takim pracownikiem. Dla niego powinny pojawić się wszyscy producenci. Producenci powinni być filtrowani dla pracownika tylko jeżeli jest dla niego wpis w tabelce #emp_prod.
Próbowałem coś z 'COALESCE', ale nie za bardzo mi to wychodzi.