0

次のSQLクエリがあります。

SELECT 
  C.Child_ID,
  C.Child_Name AS Name,
  C.Child_Surname AS Surname,
  C.Birthday AS DOB, 
  C.Location, 
  C.Primary_Image, 
  U.Text AS MostRecentUpdate,   
  U.Update_Date, 
  S.End_Date
FROM Children as C, Sponsors as S, Updates as U 
WHERE 
  S.User_ID=@UserID 
  AND C.Child_ID=S.Child_ID 
  AND C.Child_ID=U.Child_ID 
  AND U.Update_Date = (SELECT 
                         MAX(Update_Date) 
                       FROM Updates as U2 
                       WHERE U2.Child_ID=S.Child_ID) 
  AND S.End_Date>GETDATE()
  ORDER BY C.Child_Name ASC

これは、子供の詳細と子供の最新の更新を選択します(スポンサーシップWebサイト用です)。問題は、子にまだ更新がない場合(更新はFacebookのステータスに似ています)、詳細が返されないことです。

更新が存在しない場合に、子の詳細のみを返すようにこのクエリを変更する方法はありますか?

4

2 に答える 2

4

を使用しleft outer joinます:

SELECT C.Child_ID, C.Child_Name AS Name, C.Child_Surname AS Surname,
       C.Birthday AS DOB, C.Location, C.Primary_Image,
       U.Text AS MostRecentUpdate, U.Update_Date, S.End_Date
FROM Children as C
inner join Sponsors S
on C.Child_ID=S.Child_ID
left outer join Updates U 
on C.Child_ID=U.Child_ID
AND  U.Update_Date=(SELECT MAX(Update_Date) FROM Updates as U2 WHERE U2.Child_ID=S.Child_ID)
WHERE S.User_ID=@UserID AND S.End_Date>GETDATE()
ORDER BY C.Child_Name ASC
于 2012-04-11T14:54:26.280 に答える
1

子テーブルから更新テーブルへの内部結合を実行しているため、更新がない場合は結果が得られません。

古い結合構文ではなく、新しいansi互換の結合構文に変更することをお勧めします。次に、更新を使用して結合を左外部結合に変更できます。

それはそれをする必要があります。

幸運を。

于 2012-04-11T14:55:30.193 に答える