我在mssql数据库中有两个表:orders和batch。每个订单可以有很多批次。成本保留在每批中。我想提取所有订单,其中每批的成本高于例如100.如果订单的任何部分成本不高于100,这将取消订单的资格。是否可以在一个查询中执行此操作?
答案 0 :(得分:1)
一种简单的方法是按顺序使用聚合来检查每个批次:
SELECT o.id
FROM orders o
INNER JOIN batches b
ON o.batch_id = b.id
GROUP BY o.id
HAVING COUNT(CASE WHEN b.cost <= 100 THEN 1 END) = 0;
答案 1 :(得分:0)
我认为最简单的方法是使用MIN()
:
SELECT b.order_id
FROM batches b
GROUP BY b.order_id
HAVING MIN(b.cost) >= 100;
如果您需要订单信息:
select o.*
from orders o
where not exists (select 1 from batches b where b.order_id = o.order_id and b.cost < 100);