0

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

表 1:订单
Order_ID
Order_Date
Customer_ID

表 2:AMC
AMC_ID
Order_ID
Next_Renew_ID

表 3:客户
Customer_ID
Customer_Name

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

查询 1
第 1 部分: 选择所有Order_ID来自第 2 部分的记录:AMC现在 选择不在此查询第 1 部分结果中的所有记录。Next_Renew_ID='N/A'
OrderOrder_ID

查询 2
第 1 部分:Order_IDAMCwhere 中 选择所有那些Next_Renew_ID='N/A'
第 2 部分:现在选择 所有Customer_ID. 第 3 部分:现在选择不在此查询的第 1 部分的结果中且在此查询的第 2 部分的结果中的 所有记录。CustomerCustomer_Name Like 'Krish%'
OrderOrder_IDCustomer_ID

我知道它可以很容易地使用加入或类似的东西来完成,但我真的不擅长 sql。请帮我。

4

2 回答 2

0

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

Query 1 part 2 select * from Order where Order_ID not in (select a.Order_ID from Order a left join AMC b on a.Order_ID=baOrder_ID where Next_Renew_ID='N/A')

查询 2 第 2 部分

select Customer_ID from Customer where Customer_Name Like 'Krish%'

第 3 部分

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%')
于 2013-06-15T20:12:36.460 回答
0

第 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%'
于 2013-06-13T04:57:34.277 回答