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

问题描述:

我有一张允许插入记录的表格,它们非常相似,但是只有一列或两列不同。例如下面的记录在表格中:更新同一表中的重复记录或类似记录

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中相同的最后两条记录中的国家/地区列。 此外,我也想知道如何使所有重复的URL被组合在一起,或者即使它们是相似的,你在某些情况下,有一个像我的表通过网址列进行排序:提前

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

感谢。

尝试了以下内容和它的工作,URL中是相同的

UPDATE t1 

SET t1.country = t2.country 来源为T1 JOIN来源为T2 ON t1.url = t2.url WHERE t1.url = t2.url;

只是想弄清楚其余的。感谢大家


UPDATE

我能编辑有匹配的URL记录但类似于像 http://www.pantagraph.com http://pantagraph.com ​​

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

select * from Sources s 
where s.url like url 

它显示记录,但是当更新它没有工作。

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

要回答第二个问题,您需要定义“相似”。为了帮助您解决未来的第一个问题,请对数据库进行规范化处理,以确保将来不会出现这个问题。规范化的规则不仅仅是一项学术活动 - 它们的存在是为了解决现实世界的问题。 – 2010-08-02 14:08:53

+0

类似的含义,他们共享相同的网址或域名...像 http://stackoverflow.com和http://stackoverflow.com/questions/ 谢谢你的建议...规范化...基础知识..let我试试子查询 – vbNewbie 2010-08-02 14:27:54

你可以使用子查询:

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

是否存在与不同国家的URL这应该给一个错误:在这种情况下,你要适应查询选择的国家之一。

按照您的评论,有冲突的国家寻找行:

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

是啊,我得到了以下错误; 子查询返回的值超过1。这是不允许的,当子查询遵循=,!=, 当我执行以下操作: select * from Sources s where url = s.url 我看到我想要更新的记录,但只是不知道如何。 – vbNewbie 2010-08-02 14:37:18

+0

@vbNewbie:添加了一个冲突寻求查询的答案,希望它有帮助 – Andomar 2010-08-02 15:03:47

排序的URL,尝试添加另一列的仅仅是“域名”。你会提取域名(hollywoodreporter.com),存储它,并在该列上排序。或者,您可以在ORDER BY子句中使用正则表达式,但这可能会导致性能问题。

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

您正在根据网址加入表格,并根据国家/地区字段中的行进行更新。

但是,如果你有这么多重复的数据,你的设计可能是不好的。如果可以的话,尝试正常化数据库。

+0

如果有多个国家每个URL,这将覆盖国家多次(不一定是坏) – Andomar 2010-08-02 15:18:22

+0

感谢您的答复。我被告知上述情况,但特别是在这张表格上有超过200万条记录,恐怕我可能会将这些数据进行编码。我删除了重复项,一些列包含相同的值,但记录本身是唯一的。 – vbNewbie 2010-08-02 15:23:18