首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用重复记录更新sql中的查询

使用重复记录更新sql中的查询
EN

Stack Overflow用户
提问于 2016-04-22 15:19:22
回答 4查看 145关注 0票数 0

我有一个表(数百万条记录)与(dataid,url)的唯一索引。表格如下所示:

代码语言:javascript
复制
id  dataid url
1   230    https://www.example.com/123
3   230    http://example.com/123

我无法运行查询

代码语言:javascript
复制
UPDATE table_name SET url = REPLACE(url, 'http://', 'https://www.')

因为存在重复和违反唯一键约束的情况。在这种情况下,我想删除'id‘值最大的记录。我该怎么做呢?

EN

回答 4

Stack Overflow用户

发布于 2016-04-22 15:23:54

代码语言:javascript
复制
delete 
    from table a 
    join table b on a.dataid = b.dataid 
where 
    a.dataid = 230 and a.id > b.id;

试试看

票数 0
EN

Stack Overflow用户

发布于 2016-04-22 15:26:51

这将找出应该删除的行

代码语言:javascript
复制
select max(id), REPLACE(url, 'http://', 'https://www.') as url from table
group by REPLACE(url, 'http://', 'https://www.') 
having count(*)>1

这将删除它们

代码语言:javascript
复制
delete t1 from table as t1 inner join
(
select max(id), REPLACE(url, 'http://', 'https://www.') as url from table
group by REPLACE(url, 'http://', 'https://www.') 
having count(*)>1
) as t2 on t1.id=t2.id

现在更新您的数据

代码语言:javascript
复制
UPDATE table_name SET url = REPLACE(url, 'http://', 'https://www.')
票数 0
EN

Stack Overflow用户

发布于 2016-04-22 15:40:21

代码语言:javascript
复制
delete tst
where id in (select max(id)
             from tst
             group by dataid, REPLACE(url, 'http://', 'https://www.')
             having count(*) = 2);

UPDATE tst SET url = REPLACE(url, 'http://', 'https://www.');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36787436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档