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

其中选择了孩子的详细信息和孩子的最新更新(用于赞助网站)。问题是,如果孩子还没有任何更新(更新类似于 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 回答