繁体   English   中英

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

[英]Update a table by selecting data from another table MySQL query

我有两张桌子

订购表

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_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(*) ) 

提前致谢

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

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)status =1。由于存在一行状态为0的行,因此上面的查询将包含该订单-如果只想检索订单ID都是status =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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM