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:
```sql
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.