I am having the below query
SELECT {CLD}.[Id], {CLD}.[Name], {CLD}.[Comments], {CLD}.[LastUpdateOn],min({Project}.[Number]),count({Project}.[Number]) FROM {CLD} INNER JOIN {Project} ON {Project}.[Id] = {CLDProjects}.[ProjectId] INNER JOIN {CLDProjects} ON {CLD}.[Id] = {CLDProjects}.[CLDId] WHERE ( @IsJAXPM =1 or EXISTS (SELECT 1 FROM {CLDParticipant} WHERE {CLDParticipant}.[CLDId] = {CLD}.[Id] AND {CLDParticipant}.[UserId] = @UserId) or EXISTS (SELECT 1 FROM {ProjectParticipantWidget} INNER JOIN {ProjectParticipant} ON {ProjectParticipantWidget}.[ProjectParticipantId] = {ProjectParticipant}.[Id] WHERE {ProjectParticipant}.[ProjectId] = {Project}.[Id] AND {ProjectParticipant}.[UserId] = @UserId) ) GROUP BY {CLD}.[Id], {CLD}.[Name], {CLD}.[Comments], {CLD}.[LastUpdateOn]
The issue is the Select is pulling all the CLD elements without respect to the Project, I am trying to select CLD's whose Project id = Project.Id. I tried both the joins but it keep pulling all the values
Below is the structure
SELECT {CLD}.[Id], {CLD}.[Name], {CLD}.[Comments], {CLD}.[LastUpdateOn],min({Project}.[Number]),count({Project}.[Number]) FROM {CLD} LEFT JOIN {CLDProjects} ON {CLD}.[Id] = {CLDProjects}.[CLDId] LEFT JOIN {Project} ON {CLDProjects}.[ProjectId] = {Project}.[Id] WHERE (@IsJAXPM =1 or EXISTS (SELECT 1 FROM {CLDParticipant} WHERE {CLDParticipant}.[CLDId] = {CLD}.[Id] AND {CLDParticipant}.[UserId] = @UserId) or EXISTS (SELECT 1 FROM {ProjectParticipantWidget} INNER JOIN {ProjectParticipant} ON {ProjectParticipantWidget}.[ProjectParticipantId] = {ProjectParticipant}.[Id] WHERE {ProjectParticipant}.[ProjectId] = {Project}.[Id] AND {ProjectParticipant}.[UserId] = @UserId) ) GROUP BY {CLD}.[Id], {CLD}.[Name], {CLD}.[Comments], {CLD}.[LastUpdateOn] ORDER BY {CLD}.[LastUpdateOn] DESC
INNER JOIN {CLDProjects} ON {ProjectParticipant}.[ProjectId] = {CLDProjects}.[ProjectId])
on the second EXISTS join conditions, otherwise the second resultset will match the EXIST condition for every project the user is in, ignoring the other conditions over CLDProjects. Try the following:
SELECT {CLD}.[Id], {CLD}.[Name], {CLD}.[Comments] , {CLD}.[LastUpdateOn],min({Project}.[Number]) ,count({Project}.[Number]) FROM {CLD} INNER JOIN {Project} ON {Project}.[Id] = {CLDProjects}.[ProjectId] INNER JOIN {CLDProjects} ON {CLD}.[Id] = {CLDProjects}.[CLDId] WHERE ( @IsJAXPM =1 or EXISTS (SELECT 1 FROM {CLDParticipant} WHERE {CLDParticipant}.[CLDId] = {CLD}.[Id] AND {CLDParticipant}.[UserId] = @UserId) or EXISTS (SELECT 1 FROM {ProjectParticipantWidget} INNER JOIN {ProjectParticipant} ON {ProjectParticipantWidget}.[ProjectParticipantId] = {ProjectParticipant}.[Id] INNER JOIN {CLDProjects} ON {ProjectParticipant}.[ProjectId] = {CLDProjects}.[ProjectId] WHERE {ProjectParticipant}.[ProjectId] = {Project}.[Id] AND {ProjectParticipant}.[UserId] = @UserId) ) GROUP BY {CLD}.[Id], {CLD}.[Name], {CLD}.[Comments], {CLD}.[LastUpdateOn]
Also.. make sure you're not passing @IsJAXPM as 1... otherwise it will definitely return all records. Let us know if that works. Otherwise, please extend the diagram to show the ProjectParticipant and ProjectParticipantWidget tables as well.