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 BYSELECT

您可以写store25.CustomerIDstore50.CustomerID,您的查询与inner join 没有区别。

【讨论】:

谢谢!起初它不起作用,但当我重新编码时,这是关键。我确信我没有以最理想的方式做到这一点,但至少它是有效的!【参考方案2】:

嗯,我觉得整个事情听起来有点不对劲,你知道吗?您为什么不简单地使用 Group By count、customerId 和 store,然后您实际上可以使用您提到的条件添加“HAVING”,即拥有 count(*) > 9。

或者我没有赶上什么。

最好的问候

【讨论】:

我是一个初学者,所以我只是使用最基本的知识来尝试做我的查询。我不太确定你在说什么,但我现在去查一下 HAVING。

以上是关于Access 上的内部联接 SQL的主要内容,如果未能解决你的问题,请参考以下文章

Access 中部分列的内部联接

带有内部联接和子查询的 Microsoft Access 更新语句

用于 SQL 内部联接的 MS Access 中的括号问题

将 Access SQL 内部联接查询转换为 mySQL 查询的问题

LIKE sqldf 上的内部联接

复合键中的右联接 - Access SQL