我有一个表允许插入非常相似但只有一个或两个列值的记录。例如,表中包含以下记录:
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
答案 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
您根据网址加入表格,并从国家/地区字段中包含某些内容的行进行更新。
但是,如果你有那么多的重复数据,你的设计可能很糟糕。如果可以,请尝试规范化数据库。