开发者社区> 问答> 正文

MySQL UPDATE语句中使用SELECT,报错?报错

SQL语句如下:

UPDATE task T,
 (SELECT MIN(start) AS selected_value from task where parentId=:id) AS ST, 
 (SELECT MAX(end) AS selected_value from task where parentId=:id) AS EN 
   SET T.star = ST.selected_value,
         T.end = EN.selected_value
               WHERE T.id =:id

有时候会报出如下错误

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

怎么解?

展开
收起
爱吃鱼的程序员 2020-06-22 13:21:58 800 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    对ST,EN中的task起个别名就行

    UPDATEtaskT,
     (SELECTMIN(start)ASselected_valuefromtaskASt1whereparentId=:id)ASST, 
     (SELECTMAX(end)ASselected_valuefromtaskASt1whereparentId=:id)ASEN 
      SETT.star=ST.selected_value,
         T.end=EN.selected_value
            WHERET.id=:id

    引用来自“Su.E”的答案

    引用来自“八宝旗”的答案

    对ST,EN中的task起个别名就行

    UPDATEtaskT,
     (SELECTMIN(start)ASselected_valuefromtaskASt1whereparentId=:id)ASST, 
     (SELECTMAX(end)ASselected_valuefromtaskASt1whereparentId=:id)ASEN 
      SETT.star=ST.selected_value,
         T.end=EN.selected_value
            WHERET.id=:id

    引用来自“八宝旗”的答案

    对ST,EN中的task起个别名就行

    UPDATEtaskT,
     (SELECTMIN(start)ASselected_valuefromtaskASt1whereparentId=:id)ASST, 
     (SELECTMAX(end)ASselected_valuefromtaskASt1whereparentId=:id)ASEN 
      SETT.star=ST.selected_value,
         T.end=EN.selected_value
            WHERET.id=:id

    2020-06-22 13:22:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像