【问题标题】:Update a table by selecting data from another table MySQL query通过从另一个表 MySQL 查询中选择数据来更新表
【发布时间】:2011-02-22 16:07:04
【问题描述】:

我有两张桌子

订单表

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

提前致谢

【问题讨论】:

    标签: mysql sql sql-update mysql-error-1242


    【解决方案1】:

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

    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。如果您只想检索所有状态 = 0 的订单 ID。然后使用此查询:

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

    更新:根据 cmets,由于您只想在所有订单详细信息为 1 时设置 status = 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
    

    【讨论】:

    • 感谢您的回复。您建议的第二个查询运行良好,但第一个查询没有更新状态,所以我更改了这样的查询 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(*))
    • @ullasvk 我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    相关资源
    最近更新 更多