gpt4 book ai didi

mysql - 我有一个在 SQL 数据库中查找重复项的查询 - 现在如何删除所述重复项?

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

我有一个 SQL 查询,可以使用非常复杂的条件查找并分组这些重复项:

SELECT right(post_url, LOCATE('-', REVERSE(post_url),LOCATE('-',REVERSE(post_url))+1) -1) as name,
left(post_name,LOCATE('-',post_url,LOCATE('-',post_url)+1) - 1) as city,
post_title as original,ID,post_name,count(*)
FROM table WHERE post_type='finder'
GROUP BY name,city having count(*) > 1

为了解释查询,post_url 基本上是一个 url 名称,以某人的名字结尾,例如:new-jersey-something-something-donald-t

我转到右侧第二个破折号,然后通过这种方式获取名称。然后我得到左边第二个破折号中的城市/州。通过这种方式,我成功地找到了该数据库中的重复项,但我无法想出一种隔离重复项并将其删除的方法。另外,我只想删除 post_url 中有 %near% 的副本。我的问题是,使用此处的查询,我将如何更改它以删除重复项?

最佳答案

您无法通过一次查询来完成这一任务。那是因为您需要编写一个如下所示的查询:

DELETE FROM table
WHERE id IN (SELECT ... FROM table WHERE ...)

MySQL 明确禁止这样做。您无法基于引用同一表的子查询进行删除。您也无法使用 JOIN 重写此查询。

不过,有一个简单的解决方案:使用临时表和两个查询。

-- build the list of IDs to delete
CREATE TEMPORARY TABLE temp
SELECT ... FROM table WHERE ...

-- now delete those items
DELETE FROM table
WHERE id IN (SELECT id FROM temp);

您可以使用 JOIN 和索引来提高性能。

“隔离”重复项的关键是确保您要删除的每个项目都有一个主键 - 这样您就可以轻松构建要删除的 ID 列表。如果您的表没有主键,您就只能在多个列上执行 WHERE 子句和 JOIN - 这很快就会变得困惑。

关于mysql - 我有一个在 SQL 数据库中查找重复项的查询 - 现在如何删除所述重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37091567/

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