项目由于订单表做了冗余处理,存储了roomtypeid,但由于项目修改时及维护等原因,导致roomtypeid(临时视图roomtypeid1)没有及时更新,出现冗余信息未得到更新,通过相关联的priceid获取正确的roomtypeid(临时视图roomtype2),通过livi_order表的orderid找到对应记录,将roomtypeid值修改成查询到的临时视图roomtype2的值。以下是执行语句
UPDATE livi_order _order
SET _order.roomtypeid = (SELECT B.roomtypeid2 FROM (select * FROM (SELECT _order.orderid, _order. roomtypeid roomtypeid1,roomtype.roomtypeid roomtypeid2 FROM livi_order _order, livi_price price, livi_roomtype roomtype WHERE _order.priceid = price.priceid and price.roomtypeid = roomtype.roomtypeid ) temp where temp.roomtypeid1 != temp.roomtypeid2 ) B WHERE B.orderid = _order.orderid ) WHERE _order.orderid = (SELECT E.orderid FROM (select * FROM (SELECT _order.orderid,_order.roomtypeid roomtypeid1, roomtype.roomtypeid roomtypeid2 FROM livi_order _order, livi_price price, livi_roomtype roomtype WHERE _order.priceid = price.priceid and price.roomtypeid = roomtype.roomtypeid ) temp where temp.roomtypeid1 != temp.roomtypeid2 ) E WHERE E.orderid = _order.orderid )
多字段修改
UPDATE livi_order D
LEFT JOIN (select * FROM (SELECT _order.orderid,_order.roomtypeid roomtypeid1, roomtype.roomtypeid roomtypeid2 FROM livi_order _order, livi_price price, livi_roomtype roomtype WHERE _order.priceid = price.priceid and price.roomtypeid = roomtype.roomtypeid ) temp WHERE temp.roomtypeid1 != temp.roomtypeid2) C ON (C.orderid = D.orderid) SET D.roomtypeid = C.roomtypeid2 WHERE D.orderid = (SELECT E.orderid FROM (select * FROM (SELECT _order.orderid,_order.roomtypeid roomtypeid1, roomtype.roomtypeid roomtypeid2 FROM livi_order _order, livi_price price, livi_roomtype roomtype WHERE _order.priceid = price.priceid and price.roomtypeid = roomtype.roomtypeid ) temp WHERE temp.roomtypeid1 != temp.roomtypeid2 ) E WHERE E.orderid = D.orderid )