带有子查询的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章