我的数据库中有两个表。其中之一,'orders',包含一组带有整数的列,表示订单应包含的内容(如A中的5个和B中的15个)。第二个表'production_work'包含相同的订单列和日期,因此每当某人完成订单的一部分时,我都会跟踪它。
所以现在我需要一种快速的方法来了解哪些订单已经完成,并且我希望避免在第一列上有一个“已完成”的表,因为订单是可编辑的,而且保持正确的更多逻辑。
此查询有效,但编写得非常糟糕。有什么更好的方法呢?实际上有12个这样的列进入了这个查询......我只是展示了其中的3个。
SELECT *
FROM orders o
WHERE ud = (SELECT SUM(ud) FROM production_work WHERE order_id = o.ident)
AND dp = (SELECT SUM(dp) FROM production_work WHERE order_id = o.ident)
AND swrv = (SELECT SUM(swrv) FROM production_work WHERE order_id = o.ident)
答案 0 :(得分:0)
select o.*
from
orders o
inner join
(
select order_id, sum(ud) as ud, sum(dp) as dp, sum(swrv) as swrv
from production_work
group by order_id
) pw on o.ident = pw.order_id
where
o.ud = pw.ud
and o.dp = pw.dp
and o.swrv = pw.swrv