通过从另一个表MySQL查询中选择数据来更新表

通过从另一个表MySQL查询中选择数据来更新表,mysql,sql,sql-update,mysql-error-1242,Mysql,Sql,Sql Update,Mysql Error 1242,我有两张桌子 订单表 or_id count status 1 2 0 2 3 0 3 2 0 订单详情表 ordetail or_id status 1 1 1 2 1 1 3 2 0 4 2 1

我有两张桌子

订单表

or_id  count status
1        2    0
2        3    0
3        2    0
订单详情表

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\u Details表中对应order\u id的所有状态均为1,我希望将order table status更新为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(*) ) 

提前感谢

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

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个订单详细信息,则1个状态为0,2个状态为1。上面的查询将包括该订单,因为有一行状态为0。如果只希望检索所有状态为0的订单id。然后使用此查询:

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

谢谢回复。您建议的第二个查询工作正常,但第一个查询没有更新状态,因此,我更改了如下查询:更新订单o加入订单o详细信息od ON o.or\u id=od.or\u id SET o.Status=1其中o.or\u id=SELECT或\u id FROM order\u detail GROUP BY或\u id have SUMstatus=1=COUNT*@ullasvk我更新了我的答案。