Koristis outer joine kako ne treba.
1. joini na role moraju da budu inner (many to many zahteva dva inner joina). U suprotnom ces dobiti lazne matcheve u kojima ce kljucevi biti NULL.
2. right outer na membership treba da bude inner. right outer koristis kad hoces da svi redovi iz membership ulaze u join cak iako kljuc ne postoji u user, sto je ovde nemoguce jer je relacija one-to-zero/one. koristi innerjoin
3. membership na registrant treba isto da bude inner jer te ne interesuju oni koji nimaju registraciju sa receiveNewsletter
4. Kad poredis bit boolean polje, koristi <>0 umesto =1. Brze je malo a i ne zavisis od interpretacije servera (da li je true = -1 ili 1)
Code:
SELECT m.email
FROM aspnet_users u
INNER JOIN aspnet_usersInRoles uir ON u.userId = uir.userID
INNER JOIN aspnet_roles r ON r.roleID = uir.roleID
INNER JOIN aspnet_membership m ON u.userID = m.userID
INNER JOIN aspnet_custom_registrants cr ON m.userID = cr.userID
WHERE cr.receiveNewsletter <> 0 AND r.roleName = 'user'
ako ti ni ovo ne vraca rezultat onda nemas korisnika sa uslovima koje si naveo, sto pre mislim da ce biti slucaj. Iako neoptimizovan, tvoj script bi trebao da radi ok zato sto te dve where klauzule ispeglaju tvoja dva outer joina u efektivne inner join-e. Probaj ovaj skript pa javi.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić