2011-07-17 17 views
1

私は次の表を持っています:外部適用の使用NULL値を返すには

主キーとユーザー名を持つユーザー。主キー、ステータスの更新やユーザーID(外部キー)

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

とANイベント出席者があり、主キーとイベント名を持っている

ID Username  
1  Fred   
2  John  
3  Jack 

イベント

ID Eventname  
1  Ferrari Road Show 
2  Flower Show

UserStatusUpdatesテーブル主キーと2つの外部キー(イベントプライマリキーとユーザプライマリキー)を持つテーブル

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

私は背中合わせを理解していないのwheres - 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