带有子查询的 MS ACCESS 查询

Posted

技术标签:

【中文标题】带有子查询的 MS ACCESS 查询【英文标题】:MS ACCESS Query with sub queries 【发布时间】:2013-06-13 04:50:54 【问题描述】:

我需要您的帮助来为我可以从 VB6 运行的 MS Access 数据库创建两个查询。这是我的表架构(ORDER、AMC、Customer

表 1:顺序 订单号 订购日期 客户 ID

表 2:AMC AMC_ID 订单号 Next_Renew_ID

表 3:客户 客户 ID 客户名称

现在我想从执行以下操作的订单表中进行 2 次选择

查询 1第 1 部分:AMC 中选择所有 Order_ID,其中 Next_Renew_ID='N/A'第 2 部分: 现在从Order 中选择所有这些记录,其中Order_ID 不在此查询的第 1 部分的结果中。

查询 2第 1 部分:AMC 中选择所有 Order_ID,其中 Next_Renew_ID='N/A'第 2 部分: 现在从Customer 中选择Customer_Name Like 'Krish%' 中的所有Customer_ID第 3 部分: 现在从Order 中选择所有那些Order_ID 不在的记录此查询第 1 部分的结果和Customer_ID 在此查询第 2 部分的结果中。

我知道使用加入或类似的方法可以轻松完成,但我真的不擅长 sql。请帮帮我。

【问题讨论】:

【参考方案1】:

第 1 部分 -- 这使用 LEFT JOIN / NULL 检查。这也可以使用NOT IN(或者可能NOT EXISTS,假设Access支持它)来实现:

SELECT O.*
FROM Order O
   LEFT JOIN AMC A ON O.Order_ID = A.Order_Id
      AND A.Next_Renew_ID = 'N/A'
WHERE A.Order_Id IS NULL

第 2 部分 - 使用与上述相同的查询,但将 INNER JOIN 添加到客户表中以确保客户首先存在于该表中:

SELECT O.*
FROM Order O
   INNER JOIN Customer C ON O.Customer_ID = C.Customer_Id
   LEFT JOIN AMC A ON O.Order_ID = A.Order_Id
      AND A.Next_Renew_ID = 'N/A'
WHERE A.Order_Id IS NULL AND  
    C.Customer_Name Like 'Krish%'

【讨论】:

当尝试使用这些查询时,出现错误提示 JOIN Expression Not Supported.。我该怎么办?【参考方案2】:

我的英文很差,不知道有没有明白你的意思

查询 1 第2部分 select * from Order where Order_ID not in (select a.Order_ID from Order a left join AMC b on a.Order_ID=b.a.Order_ID where Next_Renew_ID='N/A')

查询 2 第二部分

select Customer_ID from Customer where Customer_Name Like 'Krish%'

第三部分

select * from Order where Order_ID not in (select Distinct Order_Id from AMC where Next_Renew_ID='N/A') and Customer_ID in (select Customer_ID from Customer where Customer_Name like 'Krish%')

【讨论】:

以上是关于带有子查询的 MS ACCESS 查询的主要内容,如果未能解决你的问题,请参考以下文章

返回多个字段的 MS Access 子查询

基于包含子查询的查询的 ms-access 交叉表查询

使用包含 SUM() 字段的子查询在 MS-Access 中编辑查询

查询不会更新子窗体 MS-Access 中的表

MS Access 中的子查询问题

MS Access 中的加入或子查询