[英]Inner Join SQL on Access
我似乎无法理解这一点,并最终决定寻求帮助。 因此,我们需要找到在Store 25和Store 50购物至少10次的人的客户ID列表。
首先,我创建了代码以创建一个表,该表包含客户ID列表以及他们在该商店购物的次数计数。 原始交易数据针对每笔交易(针对所购买的每件商品)都有多行,因此具有distinctTransactions表。
然后,我尝试在CustomerID上内部加入两个shop表,并输入> 9个条件。
我收到错误消息“指定的字段'CustomerID'可能引用您的SQL语句的FROM子句中列出的多个表。” 对我而言,这没有意义,因为我在CustomerID下加入了两个表。
如果有人能解释出哪里出了问题以及正确答案背后的逻辑,我将不胜感激! 另外,如果这段代码很接近,我是否需要两个单独的distinctTransactions表(请注意,第二个表我只是为了使它使用不同的名称而创建了distinctTransactionsc)?
SELECT CustomerID, Store25.ShopCount AS 25, Store50.ShopCount AS 50
FROM (SELECT CustomerID, COUNT(distinctTransactions.TransactionID) AS ShopCount
FROM (SELECT DISTINCT TransactionID, CustomerID, StoreID
FROM TransactionT) AS distinctTransactions
WHERE StoreID = 25
GROUP BY CustomerID) AS Store25
INNER JOIN
(SELECT CustomerID, COUNT(distinctTransactionsc.TransactionID) AS ShopCount
FROM (SELECT DISTINCT TransactionID, CustomerID, StoreID
FROM TransactionT) AS distinctTransactionsc
WHERE StoreID = 50
GROUP BY CustomerID) AS Store50
ON Store25.CustomerID = Store50.CustomerID
WHERE Store25.ShopCount > 9
AND Store50.ShopCount > 9
ORDER BY CustomerID
即使您在公用列名上连接表,也必须从表中精确找出必须在ORDER BY
和SELECT
CustomerID
。
您可以编写store25.CustomerID
或store50.CustomerID
,使用inner join
store50.CustomerID
在查询中没有区别。
整个事情听起来对我来说有点不对,您知道吗? 为什么不简单使用Group By count,customerId和store,那么您实际上可以使用提到的条件添加“ HAVING”,即“ counting(*)> 9”。
或者我没有赶上什么。
最好的祝福
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.