从3个表中获取,一个表上有一个条件

时间:2013-09-12 06:40:33

标签: sql ms-access join

我有4张桌子

Order(OrderId,OrderDate,Firm,ConsumerId)
OrderProductDetails(OrderId,ProductId,Firm,Quantity,Rate,Fulfilled,PendingQuantity) [fulfilled is boolean]
Product(ProductId,ProductName)
Consumer(ConsumerId,ConsumerName)

我想获取那些未完全履行的订单(OrderId,OrderDate,ConsumerName)。我尝试了很多,但无法使它工作。查询看起来很简单,但我不知道它会有多复杂。

2 个答案:

答案 0 :(得分:1)

根据您提供的信息,以下内容应该有效。

select order.orderid, order.orderdate, consumers.consumername
from order
inner join orderproductdetails on orderproductdetails.orderid = order.orderid
inner join consumers on consumers.consumerid = order.consumerid
where orderproductdetails.fulfilled = 0 

我假设你有一个'consumer'表,而boolean'false'用值0表示。

答案 1 :(得分:0)

以下查询应该可以正常工作 注意:
1)我已将Order表重命名为OrderT,
       2)重命名消费者 - > ConsumerT

SELECT DISTINCT OrderProductDetails.OrderId,OrderT.OrderDate,ConsumerT.ConsumerName FROM OrderProductDetails,ConsumerT INNER JOIN OrderT ON ConsumerT.ConsumerId = OrderT.ConsumerId WHERE(([OrderProductDetails]。[Fulfilled] = 0)AND([OrderProductDetails]。[OrderId] = [OrderT]。[OrderId]));

查询背后的逻辑是:您希望数据主要来自两个表OrderT和ConsumerT。但是所有数据都依赖于OrderProductDetails.Fulfilled和last,但只有一个是不满足的订单,只需要那些消费者名称。 创建查询时的MS Access Design视图有很多帮助。