我有两张桌子。
第一个表,tblBasket如下所示,
Code ProductCode Price
SLK ABC 20
SLK DEF 30
SLK GHI 40
第二个表,tblOrders如下所示,
Code ProductCode SaleId Amount
SLK ABC MMM 20
SLK DEF MMM 30
SLK GHI MMM 40
SLK ABC XXX 20
SLK DEF XXX 30
我需要针对tblOrders检查tblBasket。逻辑是篮子作为一个整体出售,即所有3个代码为SLK的产品必须一起出售。
在表格中,tblOrder是来自不同销售人员(SaleId)的订单列表。每个具有代码SLK的SaleId应该具有与篮子相同的3个产品代码。因此在上面的示例中,saleId XXX缺少产品GHI。我需要一个查询来标记这一点。
我尝试了下面的查询,但它只返回了5条记录,它没有向我显示saleId XXX中缺少的产品,即使我使用完整的外部联接。
select * from tblBasket b full outer join tblOrders o
on b.Code = o.Code and b.ProductCode = o.ProductCode
答案 0 :(得分:0)
您可以汇总数据以获取每次销售的预期和匹配产品的数量。假设两个表中都没有重复:
select sc.saleid, sc.code,
count(*) as numProducts,
count(o.productcode) as numMatchingProducts
from (select distinct saleid, code from tblOrders o) sc join
tblBasket b
on b.code = sc.code left join
tblOrders o
on o.saleid = sc.saleid and o.code = sc.code and
b.productcode = o.productcode
group by sc.saleid, sc.code;
逻辑是为每个saleid
生成所有产品的完整组合。然后,left join
确定订单中的产品是否与预期产品匹配。
如果您想获得一些订单子集,您可以添加having
子句 - 例如完整订单,不完整订单或缺少一个产品的订单。
答案 1 :(得分:-1)
从tblOrders到tblBaskets进行左外连接,加入ProductCode。如果您只想要缺少产品的订单,只需添加“WHERE tblBaskets.ID IS NULL”