2010-08-02 197 views
0

我有一張允許插入記錄的表格,它們非常相似,但是隻有一列或兩列不同。例如下面的記錄在表格中:更新同一表中的重複記錄或類似記錄

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

回答

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 

是否存在與不同國家的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

1

排序的URL,嘗試添加另一列的僅僅是「域名」。你會提取域名(hollywoodreporter.com),存儲它,並在該列上排序。或者,您可以在ORDER BY子句中使用正則表達式,但這可能會導致性能問題。

1
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