gpt4 book ai didi

mysql - 按顺序循环遍历 MySQL 表。如果值为 0,则存储其旁边的单元格值。如果不是 0 则更新为存储值

转载 作者:行者123 更新时间:2023-11-29 10:00:35 25 4
gpt4 key购买 nike

我尝试了一些过程和循环,但我无法获得结果。

我有一个包含 19,000 条记录的表,如下所示:

id | seq | custom_id
1 | 0 | 123
2 | 0 | 124
3 | 1 | NULL
4 | 0 | 125
5 | 1 | NULL
6 | 2 | NULL
7 | 3 | NULL

我的目标是:

id | seq | custom_id
1 | 0 | 123
2 | 0 | 124
3 | 1 | 124-1
4 | 0 | 125
5 | 1 | 125-1
6 | 2 | 125-2
7 | 3 | 125-3

因此,如果 seq 为 0,它将有一个自定义 ID。如果 seq 不为 0,我想获取自定义 id 并 concat -seq 到最后。

最佳答案

  • Correlated Subquery ,我们可以得到前一个(也是最接近的)custom_id值其中 seq是 0。
  • 现在,我们只需要使用 Concat() 连接前面的 custom_id 的函数当前行的值 seq值,得到新的custom_id .

尝试以下查询来选择数据 ( DB Fiddle DEMO ):

SELECT
t1.id,
t1.seq,
CASE WHEN t1.seq = 0 THEN t1.custom_id
ELSE CONCAT((SELECT t2.custom_id
FROM your_table AS t2
WHERE t2.id < t1.id AND
t2.seq = 0
ORDER BY t2.id DESC LIMIT 1), '-', t1.seq)
END AS custom_id
FROM your_table AS t1
<小时/>

但是,根据您的评论,您似乎有兴趣更新 custom_id立即列。在 MySQL 中,可以通过 Derived Tables 在同一个表(也在更新)上使用子查询。方法。

我们确定修改后的custom_id对于 id哪里seq <> 0在子选择结果集(派生表)中,然后将其Join回主表进行更新。

尝试以下方法来更新数据 ( DB Fiddle DEMO ):

UPDATE  
your_table AS tab
JOIN
(
SELECT
t1.id,
CONCAT((SELECT t2.custom_id
FROM your_table AS t2
WHERE t2.id < t1.id AND
t2.seq = 0
ORDER BY t2.id DESC LIMIT 1),
'-', t1.seq) AS custom_id
FROM your_table AS t1
WHERE t1.seq <> 0
) AS dtab ON dtab.id = tab.id
SET tab.custom_id = dtab.custom_id
WHERE tab.seq <> 0;

关于mysql - 按顺序循环遍历 MySQL 表。如果值为 0,则存储其旁边的单元格值。如果不是 0 则更新为存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com