2016-02-15 59 views
2

我有三個表MSSQL查詢問題

-Projects(ProjectId[PK], Status ...) 
-UserProjects(UserProectId[PK], ProectId[FK], UserId[FK], ...) 
-Users(UserId[PK], ...) 

我想選擇與狀態= 1,工程項目必須項目,用戶不參與。

這裏是I`ve嘗試:

Select UP.ProjectId from UserProjects UP 
Join Projects P on UP.ProjectId = P.ProjectId 
Where P.Status = 1 AND UP.UserId != 1 

結果,我想應該是公正16.這讓我也17,因爲用戶1和用戶3在項目17

任何人都知道如何解決這個問題?

回答

2

您可以使用一個HAVING條款分組:

SELECT UP.ProjectId 
FROM UserProjects UP 
INNER JOIN Projects P ON UP.ProjectId = P.ProjectId 
WHERE P.Status = 1 
GROUP BY UP.ProjectId 
HAVING COUNT(CASE WHEN UP.UserId = 1 THEN 1 END) = 0 

HAVING子句過濾掉與用戶與UserId = 1項目。

或者您可以使用NOT EXISTS

SELECT ProjectId 
FROM Projects AS P 
WHERE Status = 1 AND 
     NOT EXISTS(SELECT 1 
       FROM UserProjects AS UP 
       WHERE UP.ProjectId = P.ProjectId AND UP.UserId = 1) 
+0

非常感謝,我想它重寫LINQ,但沒有成功,你可以幫我這個也是:) – miechooy

+0

@miechooy這是一個不同的問題?嘗試在這裏寫一篇新文章是! –