更新同一个表中的重复或类似记录

时间:2010-08-02 14:00:20

标签: sql sql-server-2008

我有一个表允许插入非常相似但只有一个或两个列值的记录。例如,表中包含以下记录:

ID    TITLE                                 URL                             COUNTRY

1494  Hollywood Reporter                    http://www.hollywoodreporter.com    USA
1497  Hollywood Reporter via Drudge Report  http://www.hollywoodreporter.com    NULL
2158  Hollywood Reporter via                http://www.hollywoodreporter.com    NULL

我想更新url相同的最后两个记录中的country列。 此外,我还想知道如何通过url列对表进行排序,以便将所有重复的URL组合在一起,或者即使它们与您在某些情况下的相似,如下所示:

http://www.hollywoodreporter.com       http://www.blog.hollywoodreporter.com

提前致谢。

尝试了以下内容,它在网址相同的情况下起作用

UPDATE t1

SET t1.country = t2.country    FROM来源AS t1    JOIN来源AS t2    ON t1.url = t2.url    在哪里t1.url = t2.url;

只是想弄清楚剩下的。谢谢大家


更新

我能够编辑具有匹配网址的记录,但是对于类似的网址 http://www.pantagraph.com http://pantagraph.com http://pantagraph.com/titles

未更新。使用排序和选择时,我可以查看所有这些记录,但在尝试更新它们时,它不起作用。我甚至只是尝试了这个简单的版本:

 select * from Sources s
 where s.url like url 

显示记录,但更新时无效。

update Sources 
set country = s.country 
from Sources s 
 where s.url like url

3 个答案:

答案 0 :(得分:2)

您可以使用子查询:

update  yt
set     country = (
                  select  distinct country 
                  from    YourTable yt2 
                  where   yt.url = yt2.url 
                          and yt2.country is not null
                  )
from    YourTable yt

如果网址包含不同的国家/地区,则会出错:在这种情况下,您应该调整查询以选择其中一个国家/地区。

根据您的评论,查找包含冲突国家/地区的行:

select  url
,       count(distinct country) as NumberOfCountries
from    YourTable
where   country is not null
group by
        url
,       country
having  count(distinct country) > 1

答案 1 :(得分:1)

要对网址进行排序,请尝试为“域名”添加另一列。您将提取域名(hollywoodreporter.com),存储它,并对该列进行排序。或者,您可以在ORDER BY子句中使用正则表达式,但这可能会导致性能问题。

答案 2 :(得分:1)

update table
set
    table.country = t2.country
from
    table t2
where
    table.url = t2.url
    and t2.country is not null

您根据网址加入表格,并从国家/地区字段中包含某些内容的行进行更新。

但是,如果你有那么多的重复数据,你的设计可能很糟糕。如果可以,请尝试规范化数据库。