0

我在使用这个 Access SQL 时遇到了困难......我希望所有活动的 CustomerID 都出现,无论 OrderDate 是否匹配,我都无法弄清楚我做错了什么。

SELECT 
    tblCustomers_PullLists.CustomerID, 
    tblCustomers_PullLists.Title, 
    tblCustomers_PullLists.Active, 
    tblCustomers.FullName, 
    tblOrders.OrderDate, 
    tblCustomers.Notes
FROM 
    (
        (
            tblCustomers_PullLists 
            INNER JOIN 
            tblOrderDetails 
                ON tblCustomers_PullLists.Title = tblOrderDetails.Title
        ) 
        INNER JOIN 
        tblOrders 
            ON tblOrderDetails.OrderNumber = tblOrders.ID
    ) 
    LEFT JOIN 
    tblCustomers 
        ON tblCustomers_PullLists.CustomerID = tblCustomers.ID
WHERE (((tblCustomers_PullLists.Active)=Yes) 
    AND ((tblOrders.OrderDate)=[Please enter order date]))
ORDER BY tblCustomers_PullLists.CustomerID;

任何帮助将不胜感激!!

4

2 回答 2

1

首先要注意的是您的查询有

(stuff) LEFT JOIN tblCustomers

如果您希望所有客户都出现,那么您可能需要 RIGHT JOIN,而不是 LEFT JOIN。

另一个问题是 OrderDate。在该日期没有订单的客户将具有 NULL OrderDate 值,因此您可能必须将 WHERE 条件从...

(tblOrders.OrderDate)=[Please enter order date]

...至...

(((tblOrders.OrderDate)=[Please enter order date]) OR (tblOrders.OrderDate IS NULL))
于 2013-06-13T11:16:21.547 回答
0

好吧,在这种情况下,过滤器

AND ((tblOrders.OrderDate)=[Please enter order date])

没有任何意义。

删除 where 子句的那部分,你应该得到所有活跃的客户。

于 2013-06-13T05:39:24.557 回答