【发布时间】:2016-04-06 23:40:35
【问题描述】:
我有这个接近我想要的 SQL 语句:
SELECT CustomerList.*, Sales.Sales, Sales.MonthYear
FROM (CustomerList INNER JOIN WhoBuysWhat ON CustomerList.CustomerID = WhoBuysWhat.CustomerID) LEFT JOIN Sales ON CustomerList.CustomerID = Sales.CustomerID
WHERE WhoBuysWhat.ProductID=2
ORDER BY CustomerList.CustomerName;
这为我提供了购买某个产品线的所有客户以及该产品线的销售表中的任何销售额。但我想要的是添加另一个 WHERE 语句。我希望第一个 INNER JOIN 给我所有购买 productID 2 的客户。然后我想左加入那些匹配 sales.monthyear=#1/1/2015# 的销售。所以我尝试了这个(以不同的方式):
SELECT CustomerList.*, Sales.Sales, Sales.MonthYear
FROM ((CustomerList INNER JOIN WhoBuysWhat ON CustomerList.CustomerID = WhoBuysWhat.CustomerID) WHERE WhoBuysWhat.ProductID=2) LEFT JOIN Sales ON CustomerList.CustomerID = Sales.CustomerID
WHERE Sales.MonthYear=#1/1/2015#
ORDER BY CustomerList.CustomerName;
那是行不通的。如果我这样做:
WHERE WhoBuysWhat.ProductID=2 AND Sales.MonthYear=#1/1/2015#
或
WHERE Sales.ProductID=2 AND Sales.MonthYear=#1/1/2015#
它只给我当月有销售的客户。我希望所有购买该产品线的客户在给定的一个月内进行任何销售。这可能在 1 个 SQL 语句中吗?我需要对第一个连接表使用 AS 吗?我找不到任何可以帮助我的东西。
J_K_M_A_N
编辑: 如果以后有人关心或需要帮助,这是最后的有效 SQL 语句。
SELECT CustomerList.*, Sales.SalesID, Sales.Sales, WhoBuysWhat.EntryID, WhoBuysWhat.Active
FROM (CustomerList INNER JOIN WhoBuysWhat ON CustomerList.CustomerID = WhoBuysWhat.CustomerID)
LEFT JOIN Sales ON (CustomerList.CustomerID = Sales.CustomerID AND Sales.MonthYear=#1/1/2015# AND Sales.ProductID=2)
WHERE WhoBuysWhat.ProductID=2
ORDER BY WhoBuysWhat.Active, CustomerList.CustomerName
【问题讨论】: