【问题标题】:Can the query be Improved as it is going for timeout exception查询是否可以改进,因为它正在处理超时异常
【发布时间】:2014-08-10 19:38:49
【问题描述】:

如何改进我的查询,因为它将超时异常。有人可以帮我改进查询...???

UPDATE pdtdeliveryTable p  SET p.OrderID = IFNULL
( 
   (SELECT OrderID from OrderTable o where o.DiagramID=p.DiagramID AND o.DeliveryDate=
   (
        Select min(o2.DeliveryDate) from OrderTable o2 where o2.DiagramId=o.DiagramID Order by o2.DeliveryDate
   )Limit 1),0
)
where p.OrderID=0;

【问题讨论】:

    标签: mysql sql join group-by sql-update


    【解决方案1】:

    试试这个:

    UPDATE pdtdeliveryTable p  
    LEFT OUTER JOIN (SELECT o.DiagramID, o.OrderID FROM OrderTable o 
                     INNER JOIN ( SELECT DiagramID, MIN(DeliveryDate) DeliveryDate 
                                  FROM OrderTable GROUP BY DiagramID
                                ) AS A ON o.DiagramID = A.DiagramID AND o.DeliveryDate = A.DeliveryDate 
                   ) AS A ON A.DiagramID = p.DiagramID
    SET p.OrderID = IFNULL(A.OrderID, 0);
    

    UPDATE pdtdeliveryTable p  
    LEFT OUTER JOIN ( SELECT DiagramID, OrderID 
                      FROM (SELECT DiagramID, OrderID, DeliveryDate FROM OrderTable ORDER BY DiagramID, DeliveryDate) AS A 
                      GROUP BY DiagramID 
                    ) AS A ON p.DiagramID = A.DiagramID 
    SET p.OrderID = IFNULL(A.OrderID, 0);
    

    【讨论】:

    • @Sarharsh 但是查询没有考虑到最小的 DeliveryDate 它在第二个查询中取最高值。
    猜你喜欢
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多