sqlite 使用sql按排序的时间戳更新ID值

fae0ux8s  于 2022-12-27  发布在  SQLite
关注(0)|答案(2)|浏览(242)

我有几个表看起来像下面(sqlite)
表A:
| a_id(唯一)|时间戳|
| - ------| - ------|
| 二十一|一百二十三|
| 第二章|一百七十八|
| 三十三|一百零一|
| 七|二百二十一|
| 四个|一百一十五|
表B:
| b_id(唯一)|a标识符|数据(无需排序)|
| - ------| - ------| - ------|
| 十四|四个|bb|
| 三个|第二章|日|
| 二十二|二十一|埃|
| 六个|七|xx|
| 十七|第二章|特|
| 十一|三十三|QQ|
现在我想根据a中的时间戳更新这些表'_id,如下所示:
表A:
| a标识符|时间戳|
| - ------| - ------|
| 1个|一百零一|
| 第二章|一百一十五|
| 三个|一百二十三|
| 四个|一百七十八|
| 五个|二百二十一|
表B:
| b_id| a标识符|资料|
| - ------| - ------| - ------|
| 1个|1个|QQ|
| 第二章|第二章|bb|
| 三个|三个|埃|
| 四个|四个|日|
| 五个|第二章|特|
| 六个|五个|xx|
我怎样才能用sql轻松地做到这一点,而不需要重新插入数据等?
谢谢
我曾经用新的和按时间戳排序的ID创建一个虚拟列,然后相应地更新其他表,但效率很低,我已经忘记了我是如何做到的

    • 更新日期:**

为了简单起见,我想在表a中创建一个新列sort_id,它根据排序后的时间戳保存值,因此
之前:
表a
| a_id(唯一)|时间戳|
| - ------| - ------|
| 二十一|一百二十三|
| 第二章|一百七十八|
| 三十三|一百零一|
| 七|二百二十一|
| 四个|一百一十五|
之后:
表a
| a_id(唯一)|时间戳|排序标识|
| - ------| - ------| - ------|
| 二十一|一百二十三|三个|
| 第二章|一百七十八|四个|
| 三十三|一百零一|1个|
| 七|二百二十一|五个|
| 四个|一百一十五|第二章|
那么我如何根据时间戳填充sort_id列呢?

ztmd8pv5

ztmd8pv51#

你想要查询你的表b数据并且基于时间戳排序它。
数据库中的行顺序根本无法保证,并且在每次插入/更新后随时都会更改,因此需要连接两个表并根据时间戳列进行排序:

select  b.*
from table_b b
left join table_a a 
   on a.a_id = b.a_id
order by a.timestamp
aurhwmvo

aurhwmvo2#

更改表以添加新列后...

WITH
  sorted AS
(
  SELECT
    a_id,
    ROW_NUMBER() OVER (ORDER BY timestamp) AS new_sort_id
  FROM
    table_a
)
UPDATE
  table_a
SET
  sort_id = sorted.new_sort_id
FROM
  sorted
WHERE
  table_a.a_id = sorted.a_id

相关问题