2011-07-17 53 views
1

我有以下表:其具有主鍵和用戶名例如使用外應用要返回空值

用戶

ID Username  
1  Fred   
2  John  
3  Jack 

事件具有主鍵和事件名稱

ID Eventname  
1  Ferrari Road Show 
2  Flower Show
其中有主鍵,狀態更新和用戶ID(外鍵)

ID UserID UserStatus 
1 1  Really Good 
2 1  Leaving Now 
3 2  I concur

和事件與會者

UserStatusUpdates表表具有主鍵和兩個外鍵(事件主鍵和用戶主鍵)

ID UserID EventID 
1 1  1 
2 2  1 
3 3  1

我遇到的問題是我需要返回所有事件與會者加上他們的最新狀態更新,但有些情況下用戶並未實際進行狀態更新。

這是我的查詢看起來像:

SELECT EventAttendee.*, Users.UserName,Users.USERS_ID, 
Users.ThumbnailPic, 
Users.CountryName, 
ISNULL(UserStatusUpdates.UserStatus,'No Updates')AS LastUpdate, 
UserStatusUpdates.MediaTypeID,UserStatusUpdates.USERSTATUS_ID,(UserStatusUpdates.AddDate) 

FROM EventAttendee 
JOIN Users ON Events.UserID = Users.USERS_ID 
OUTER APPLY (SELECT TOP 1 UserStatusUpdates.UserStatus,UserStatusUpdates.MediaTypeID, 
UserStatusUpdates.USERSTATUS_ID,UserStatusUpdates.AddDate, UserStatusUpdates.UserID 
    FROM UserStatusUpdates where UserStatusUpdates.UserID = Users.USERS_ID 
ORDER BY AddDate DESC) AS UserStatusUpdates WHERE UserStatusUpdates.UserID = EventAttendee.UserID 

WHERE EventAttendee.EventID = @EventID 
AND Users.bDeleted = 'False' 
AND Users.bSuspended = 'False' 
END 

我怎樣才能找回誰可能沒有做了一個更新的用戶?

+0

我不明白背靠背何在 - WHERE TempUserStatusUpdates.UserID = EventAttendee.UserID WHERE EventAttendee.EventID = @EventID – hatchet

+0

對不起,這是一個錯誤,我已經改回了UserStatusUpdates。 – pmillio

回答

2

您的查詢有多個where子句,並且您已經在子查詢中指定UserStatusUpdates.UserID = Users.USERS_ID聯接。試試這個:

SELECT 
    EventAttendee.*, 
    Users.UserName,Users.USERS_ID, 
    Users.ThumbnailPic, 
    Users.CountryName, 
    ISNULL(UserStatusUpdates.UserStatus,'No Updates') AS LastUpdate, 
    UserStatusUpdates.MediaTypeID, 
    UserStatusUpdates.USERSTATUS_ID, 
    UserStatusUpdates.AddDate 
FROM 
    EventAttendee 
    JOIN Users ON 
    Events.UserID = Users.USERS_ID 
    OUTER APPLY (
    SELECT TOP 1 
     UserStatusUpdates.UserStatus, 
     UserStatusUpdates.MediaTypeID, 
     UserStatusUpdates.USERSTATUS_ID, 
     UserStatusUpdates.AddDate, 
     UserStatusUpdates.UserID 
    FROM 
     UserStatusUpdates 
    WHERE 
     UserStatusUpdates.UserID = Users.USERS_ID 
    ORDER BY 
     AddDate DESC 
) AS UserStatusUpdates 
WHERE 
    EventAttendee.EventID = @EventID 
    AND Users.bDeleted = 'False' 
    AND Users.bSuspended = 'False' 
END 
+0

哇,多虧了很多工作,我一直在努力工作了很多年。再次非常感謝你的幫助。 – pmillio