2012-04-11 192 views
0

我有以下SQL查询: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 
    [email protected] 
    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状态),则不会返回任何详细信息。

如果没有更新存在,是否有修改此查询以返回子详细信息的方法?

+3

为一,我会建议使用适当的JOIN语法,而不是在表格之间使用逗号 – Taryn 2012-04-11 14:54:04

+0

好的,我会研究他们,谢谢。 – Matt 2012-04-11 15:13:54

回答

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 [email protected] AND S.End_Date>GETDATE() 
ORDER BY C.Child_Name ASC 
+0

谢谢你做到了,我也会考虑加入:) – Matt 2012-04-11 15:12:53

1

你没有结果时,有没有更新,因为你正在做内部从子表的更新表连接。

我建议您将其更改为较新的ansi兼容连接语法,而不是旧连接语法。然后,您可以将更新连接更新为左外连接。

这应该做到这一点。

祝你好运。

+0

感谢您的帮助,我会研究加入,因为我不习惯使用它们。再次感谢。 – Matt 2012-04-11 15:13:28