Salve,
il filtro di WHERE scarta tutte le righe del prodotto che non soddisfino Titolo = 'xx'
quindi io prima otterrei il risultato "netto" della proiezione soddisfatta dal filtro, e quindi aggiungerei le righe "nulle" degli utenti che non abbiano votato...
trivialmente, data la popolazione
INSERT INTO Utenti
VALUES ( 1, 'UA' ), ( 2, 'UB' ), ( 3, 'UC' ), ( 4, 'UD' ), ( 5, 'UE' ), ( 6, 'UG' );
INSERT INTO Film
VALUES ( 1, 'FA' ), ( 2, 'FB' ), ( 3, 'FC' ), ( 4, 'FD' ), ( 5, 'FE' ), ( 6, 'FG' );
INSERT INTO Votare
VALUES ( 1, 1, 10 ),
( 2, 1, 9), ( 2, 2, 8),
( 3, 1, 8), ( 3, 2, 8), ( 3, 3, 7),
( 4, 1, 10), ( 4, 2, 9), ( 4, 3, 8), ( 4, 4, 7),
( 5, 1, 10), ( 5, 2, 9), ( 5, 3, 8), ( 5, 4, 7), ( 5, 5, 6);
prima otterrei il prodotto delle votazioni valide, al quale poi aggiungere i non votanti:
DECLARE @film varchar(5) = 'FD';
WITH cte AS (
SELECT v.*
FROM Film f
JOIN Votare v ON v.Cod = f.Cod
WHERE f.Titolo = @film
)
SELECT *
FROM Utenti u
LEFT JOIN cte ON cte.Id = u.Id;
--<-------------
Id Nome Id Cod Voto
----------- ----- ----------- ----------- -----------
1 UA NULL NULL NULL
2 UB NULL NULL NULL
3 UC NULL NULL NULL
4 UD 4 4 7
5 UE 5 4 7
6 UG NULL NULL NULL
salutoni romagnoli
--
Andrea