Access 上的内部联接 SQL
Posted
技术标签:
【中文标题】Access 上的内部联接 SQL【英文标题】:Inner Join SQL on Access 【发布时间】:2015-12-08 13:40:16 【问题描述】:我似乎无法得到这个,最后决定寻求帮助。因此,我们需要从在 Store 25 和 Store 50 购物至少 10 次的人中找到客户 ID 列表。
首先,我创建了一个代码来创建一个表格,其中包含客户 ID 列表和他们在该商店购物的次数。原始交易数据对于每笔交易(对于购买的每件商品)都有多行,因此是 distinctTransactions 表。
然后我尝试在 CustomerID 上内连接两个商店表并输入 > 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
【问题讨论】:
【参考方案1】:即使您在一个共同的列名上连接表,您也必须从 CustomerID
中精确选择您的 ORDER BY
和 SELECT
。
您可以写store25.CustomerID
或store50.CustomerID
,您的查询与inner join
没有区别。
【讨论】:
谢谢!起初它不起作用,但当我重新编码时,这是关键。我确信我没有以最理想的方式做到这一点,但至少它是有效的!【参考方案2】:嗯,我觉得整个事情听起来有点不对劲,你知道吗?您为什么不简单地使用 Group By count、customerId 和 store,然后您实际上可以使用您提到的条件添加“HAVING”,即拥有 count(*) > 9。
或者我没有赶上什么。
最好的问候
【讨论】:
我是一个初学者,所以我只是使用最基本的知识来尝试做我的查询。我不太确定你在说什么,但我现在去查一下 HAVING。以上是关于Access 上的内部联接 SQL的主要内容,如果未能解决你的问题,请参考以下文章
带有内部联接和子查询的 Microsoft Access 更新语句