2012-04-11 190 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