1

我有两张桌子

订单表

or_id  count status
1        2    0
2        3    0
3        2    0

Order_Details 表

ordetail         or_id    status
    1               1         1
    2               1         1
    3               2         0
    4               2         1
    5               2         1
    6               3         1
    7               3         1

如果 Order_Details 表中相应 order_id 的所有状态均为 1,我希望将订单表状态更新为 1。我尝试使用此查询,但由于子查询返回超过 1 行,因此无法正常工作

UPDATE order o JOIN order_detail od ON o.or_id = od.or_id SET o.Status = 1 WHERE 
o.or_id= (SELECT or_id FROM order_detail GROUP BY or_id 
HAVING SUM(status = 1) = COUNT(*) ) 

提前致谢

4

1 回答 1

3

第一个根据状态更新的查询:

UPDATE `order` o
  JOIN Order_Detail od ON o.or_id = od.order_id
SET o.Status = 1
WHERE od.Status = 1 

要检索的第二个查询:

SELECT DISTINCT order_id
FROM Order_Detail
WHERE status = 0

注意:如果一个订单有 2 个 order_details,1) 状态 = 0 和 2) 状态 = 1。上述查询将包括该订单 - 因为有一行状态 = 0。如果您只想检索订单 ID都是状态 = 0。然后使用此查询:

SELECT order_id
FROM Order_Detail
GROUP BY order_id
HAVING SUM(status = 0) = COUNT(*)

更新:根据评论,由于您只想在所有订单详细信息均为 1 时设置状态 = 1,因此请使用此更新查询:

 UPDATE `order` o
  JOIN (
    SELECT order_id
    FROM Order_Detail
    GROUP BY order_id
    HAVING SUM(status = 1) = COUNT(*)
  ) og ON o.or_id = og.order_id
SET o.Status = 1
于 2011-02-22T19:03:12.587 回答