gpt4 book ai didi

mysql - 从另一列中的所有值更新列集最长值

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

我有这样的表“报告”:

key | symbol | name   | price | longest_name
1 | a1 | abc | 1 | NULL
2 | a2 | qwe | 2 | NULL
3 | a1 | a | 5 | NULL
4 | a2 | xyz1 | 4 | something
5 | a3 | zz | 1 | NULL
6 | a1 | qweasd | 0 | NULL

我想在“longest_name”列中获得“name”列的最长值,但仅限于具有相同符号的行,并且仅当“longest_name”为NULL时

因此,使用这些数据,结果将如下所示:

key | symbol | name   | price | longest_name
1 | a1 | abc | 1 | qweasd
2 | a2 | qwe12 | 2 | qwe12
3 | a1 | a | 5 | qweasd
4 | a2 | xyz | 4 | something
5 | a3 | zz | 1 | zz
6 | a1 | qweasd | 0 | qweasd

我正在尝试不同的方法,但没有运气,主要是因为我认为我无法同时修改表并读取它。

有什么想法可以通过一个查询解决这个问题吗?

老实说,我不确定MySQL是否会为我这样做,因为表只有几百万行,所以可能存在内存问题,但仍然值得尝试。如果没有别的事,我将编写 PHP 脚本,它将逐行执行此操作,但这需要很长时间才能完成,并且在一段时间后我将不得不再次执行此操作。

最佳答案

您可以编写如下更新查询:

UPDATE test t
SET t.longest_name = (
SELECT a.name
FROM (
SELECT symbol, name
FROM test t1
WHERE LENGTH(name) = (
SELECT MAX(LENGTH(NAME))
FROM test
WHERE symbol = t1.symbol
)
) a
WHERE a.symbol = t.symbol
)
WHERE longest_name IS NULL;

这里的逻辑是使用多一层嵌套来解决 MySQL 更新和从同一个表中选择的错误。

这是SQL Fiddle

关于mysql - 从另一列中的所有值更新列集最长值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137926/

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