更新同一表中的重复记录或类似记录
问题描述:
我有一张允许插入记录的表格,它们非常相似,但是只有一列或两列不同。例如下面的记录在表格中:更新同一表中的重复记录或类似记录
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
答
你可以使用子查询:
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
答
排序的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
您正在根据网址加入表格,并根据国家/地区字段中的行进行更新。
但是,如果你有这么多重复的数据,你的设计可能是不好的。如果可以的话,尝试正常化数据库。
要回答第二个问题,您需要定义“相似”。为了帮助您解决未来的第一个问题,请对数据库进行规范化处理,以确保将来不会出现这个问题。规范化的规则不仅仅是一项学术活动 - 它们的存在是为了解决现实世界的问题。 – 2010-08-02 14:08:53
类似的含义,他们共享相同的网址或域名...像 http://stackoverflow.com和http://stackoverflow.com/questions/ 谢谢你的建议...规范化...基础知识..let我试试子查询 – vbNewbie 2010-08-02 14:27:54