【发布时间】:2010-03-12 20:34:28
【问题描述】:
我正在尝试编写一个查询,该查询将返回所有仅包含订阅的订单。编写一个包含所有带有订阅的订单的查询很容易,另一个包含所有没有订阅的订单,然后将它们与不匹配的查询进行比较。
但我不想将查询存储在我的 Access 数据库中,我更喜欢将它全部存储在我的 ASP 代码中,而且我不能只使用一个复杂的查询。
以下是我存储它们的示例:
Query1
SELECT tblOrders.OrderID, tblOrderItems.ProductID
FROM tblOrders INNER JOIN tblOrderItems ON tblOrders.OrderID = tblOrderItems.OrderID
WHERE ((Not ((tblOrderItems.ProductID)>=12 And (tblOrderItems.ProductID)<=15)));
Query2
SELECT tblOrders.OrderID, tblOrderItems.ProductID
FROM tblOrders INNER JOIN tblOrderItems ON tblOrders.OrderID = tblOrderItems.OrderID
WHERE ((((tblOrderItems.ProductID)>=12 And (tblOrderItems.ProductID)<=15)));
Query3
SELECT Query2.OrderID, Query2.ProductID
FROM Query2 LEFT JOIN Query1 ON Query2.OrderID = Query1.OrderID
WHERE (((Query1.OrderID) Is Null));
所以,我的问题是“如何编写 Query3 以使其不引用 Query1 或 Query2?” 或者,我是否错过了其他方式来做到这一点?
谢谢, 皮特 peteaugello@verizon.net
【问题讨论】:
-
使用 Query1 和 Query2 作为子查询表不起作用?即:SELECT * FROM (SELECT * FROM table1) t1 JOIN (SELECT * FROM table2) t2 USING(id)
-
谢谢,Slokun,但不行:至少我无法让连接工作。
-
能否请您给我们表格定义(或示例)并解释您在结果集中究竟想要什么?
-
如果您真的需要,我很乐意提供完整的详细信息,但简而言之,我的产品有 tblProducts; tblOrders -- 每个订单一个记录 -- 和 tblOrderItems 记录一个订单中的每个项目。 tblOrderItems 具有 OrderID 和 ProductID,并且 INNER JOIN 为我提供了订单的所有产品。我的一些产品是单独发货的订阅。我需要找到只有订阅而没有其他内容的订单,所以我可以将它们标记为已发货。如果您需要更多,请告诉我。感谢您的帮助!