gpt4 book ai didi

mysql - 更新mysql中后续重复的字段值

转载 作者:行者123 更新时间:2023-11-29 14:47:53 25 4
gpt4 key购买 nike

我有以下架构:

id | order_ref | description | price

目前我遇到以下重复问题:

1 | 34567 | This is the description | 19.99
2 | 34567 | This is the description | 13.99

这是由于我导入的数据中每个项目的描述都是重复的。有没有办法可以保留第一行,然后将后续(最多大约 20 行)的描述更新为“如上”?

1 | 34567 | This is the description | 19.99
2 | 34567 | - AS ABOVE - | 13.99

谢谢

-----已更新

UPDATE documents_orders_breakdown
SET `desc` = '- AS ABOVE -'
WHERE NOT id IN (SELECT id
FROM documents_orders_breakdown AS D
WHERE D.`desc` <> `desc`
ORDER BY D.id
LIMIT 1)

但这会返回 [Err] 1235 - 此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”

--------已更新

UPDATE documents_orders_breakdown
SET `desc` = '- AS ABOVE -'
WHERE NOT id IN (SELECT MIN(id)
FROM documents_orders_breakdown AS t
WHERE t.`desc` = `desc`)

现在返回 [Err] 1093 - 您无法在 FROM 子句中指定用于更新的目标表“documents_orders_breakdown”

最佳答案

如果这是一次性的事情,那么性能并不是一个大问题。您可以对 LIMIT 为 1 的 SELECT 未返回的所有记录运行 UPDATE。

UPDATE the_table
SET description = '- AS ABOVE -'
WHERE NOT id IN (SELECT id
FROM the_table t
WHERE t.description = the_table.description
ORDER BY t.id
LIMIT 1)

此查询假设您要保留 id 排在前面的记录的描述(因此是 ORDER BY)。

<小时/>

由于不能在子查询中使用 LIMIT,因此可以使用聚合函数 MIN 来解决这个问题:

UPDATE the_table
SET description = '- AS ABOVE -'
WHERE NOT id IN (SELECT MIN(id)
FROM the_table t
WHERE t.description = the_table.description)

(希望您可以混合使用 MIN 和子查询;)

<小时/>

显然you can't SELECT from the table you're UPDATEing in MySQL 。解决方法是使用隐式临时表。这对性能不利,但是,考虑到这是一次性的事情,这并不是一个大问题。

UPDATE the_table
SET description = '- AS ABOVE -'
WHERE NOT id IN (SELECT m FROM (SELECT MIN(id) AS m
FROM the_table t
WHERE t.description = the_table.description) AS temp)

关于mysql - 更新mysql中后续重复的字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490504/

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