Access 2002 SQL用于连接三个表

时间:2016-11-10 02:58:48

标签: sql join access

我一直想让它工作一段时间。我有3张桌子。第一个表包含客户的销售,其中包括CustomerID,DateOfSales(始终具有该月的第一个)。第二个表具有CustomerName,CustomerID。第三个表有哪些客户购买哪些产品线。它们由CustomerID,ProductID存储。

我希望获得一个列表(希望从一个SQL中获得),其中列出的所有客户都是从Sales中购买某个ProductID和maxDate。如果有该客户的销售,我可以获得所有这些。如果没有找到销售,我如何获得从Sales购买特定ProductID和maxDate的所有客户或NULL?

SalesList |CustomerList|WhoBuysWhat
----------|------------|-----------
maxDate   |CustomerID  |CustomerID
CustomerID|            |ProductID=17

这和我一样接近。它获得所有最大日期,但仅限于有销售。如果还没有记录销售,我想要CustomerID和maxDate的NULL。

SELECT WhoBuysWhat.CustomerID, CustomerList.CustomerName,
Max(SalesList.MonthYear) AS MaxOfMonthYear FROM (CustomerList INNER
JOIN  SalesList ON CustomerList.CustomerID = SalesList.CustomerID) INNER
JOIN  WhoBuysWhat ON CustomerList.CustomerID = WhoBuysWhat.CustomerID
WHERE  (((SalesList.ProductID)=17)) GROUP BY WhoBuysWhat.CustomerID,
CustomerList.CustomerName;  

是否可以或者我需要使用多个SQL语句?我知道我们应该得到比Access 2002更新的东西,但这就是他们所拥有的。

1 个答案:

答案 0 :(得分:1)

您需要LEFT JOIN s:

SELECT cl.CustomerID, cl.CustomerName,
       Max(sl.MonthYear) AS MaxOfMonthYear
FROM (CustomerList as cl LEFT JOIN
      (SELECT sl.*
       FROM SalesList sl
       WHERE sl.ProductID = 17
      ) as sl
      ON cl.CustomerID = sl.CustomerID 
     ) LEFT JOIN
     WhoBuysWhat wbw
     ON cl.CustomerID = wbw.CustomerID
GROUP BY cl.CustomerID, cl.CustomerName;