2016-02-25 64 views
0

在父表子表中,子表包含日期時間列的情況下,我只在所提供的日期範圍內選擇僅具有子記錄的父記錄。選擇只記錄在提供的日期範圍內的記錄

例如購物車 - 購物車詳細信息購物車詳細信息包含「添加日期」列,我想選擇本週僅有「添加日期」的所有購物車記錄。

喜歡的東西:

SELECT * 
FROM Cart 
JOIN CartDetail ON CartDetail.CartId = Cart.Id 
??? 

我不知道如何選擇車記錄中,其中CartDetail.DateAdded只是提供的日期範圍內。

回答

0

您可以使用NOT EXISTS

SELECT * 
FROM Cart AS c 
INNER JOIN CartDetail AS cd ON cd.CartId = c.Id 
WHERE cd.DateAdded BETWEEN @start_date AND @end_date 
     AND 
     NOT EXISTS (SELECT 1 
        FROM CartDetail AS cd2 
        WHERE cd2.CartId = c.Id AND 
         cd2.DateAdded < @start_date OR cd2.DateAdded > @end_date) 
+0

我認爲,這也將選擇那些會在以前的日期中添加的記錄,只要是給定範圍內至少有一個記錄範圍爲好。 我正在尋找只有在給定範圍內有子記錄的人。 – Flea

+0

@Flea我剛剛意識到我的錯誤。更正! –

+0

謝謝@Giorgos Betsos – Flea