【问题标题】:Target table not updatable? Creating a sequence column with ORDER BY using MySql 5.5.62目标表不可更新?使用 MySql 5.5.62 创建带有 ORDER BY 的序列列
【发布时间】:2021-09-16 18:51:55
【问题描述】:

我正在使用 MySql 5.5.62 输入以下查询,但收到表不可更新的错误消息?

SET @row_number = 0
> OK
> Time: 0,064s


UPDATE `tbl_a` t
JOIN ( SELECT ( @row_number := @row_number + 1 ) pNum, 
pDateHour, pPrio, pID FROM `tbl_a` ORDER BY pDateHour ASC ) q ON t.pID = q.pID 
SET t.pPrio = q.pNum
> 1288 - The target table q of the UPDATE is not updatable
> Time: 0,068s

我想要实现的是通过添加一个序列列,我可以对我的结果进行排序,而不是在多个列上进行排序。它基于一个涉及 1 列的 ORDER BY 子句。

我需要这个结果

+-------+---------------------+
| pPrio | pDateHour           |
+-------+---------------------+
|    1  | 2021-09-16 18:40:02 |
|    2  | 2021-09-16 19:00:20 |
|    3  | 2021-09-16 19:20:47 |
|    4  | 2021-09-16 20:00:59 |
|    5  | 2021-09-16 20:01:48 |
|    6  | 2021-09-16 20:20:31 |
|    7  | 2021-09-16 20:40:05 |
+-------+---------------------+

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您似乎想要的序列列实际上是基于pDateHour 的派生列。因此,在查询时实际生成此序列可能更有意义,而不是进行更新:

    SELECT (@rn := @rn + 1) AS pPrio, pDateHour
    FROM yourTable, (SELECT @rn := 0) AS x
    ORDER BY pDateHour;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-30
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多