2011-08-10 94 views
-8

表:設置主鍵`id`

ProductComapny

字段:idname

ProductComapny內容10000 recorde。

現在我想id設置主鍵,但一些id記錄已經被反覆

1.how可以id設置主鍵???

2.如何刪除重複記錄?

3.如何獲取重複記錄的數量?

由SQL SQLServer中和MySQL

學習

+2

此標記都'mysql'和'SQL server'。 **這是它嗎?** – JNK

+0

sql sql sql sql sql無論sql server還是mysql – ashkufaraz

+1

@JNK - LOL,Good Spot。 @ ashkufarax - 它很重要,MySQL和SQL Server有不同的操作可用於對方;他們用不同的語法以不同的方式做不同的事情。例如,我的答案在MySQL中不起作用。 – MatBailie

回答

5

回答了SQL Server - 這不會在MySQL工作。請指定哪些人,而不是光顧能夠幫助你的人。


要獲得重複的次數:

SELECT id, name, COUNT(*) FROM productCompany GROUP BY id, name 

要應用一個主鍵,先刪除重複如下:

WITH sorted AS 
(
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY id, name) AS duplicate_id, 
    id, 
    name 
    FROM 
    productCompany 
) 
DELETE 
    sorted 
WHERE 
    duplicate_id > 1 

然後使用Management Studio應用您首要的關鍵。

+0

如何獲取重複記錄的數量? – ashkufaraz

+0

我意識到問題被標記爲SQL Server和MySQL。請注意,這裏沒有窗口函數('ROW_NUMBER()OVER ...')在MySQL中。 –

2

3.如何獲取重複記錄的數量?

SELECT id, COUNT(*) 
    FROM ProductCompany 
    GROUP BY id 
    HAVING COUNT(*) > 1 

2.如何刪除重複記錄?

你會如何選擇保留哪一個?

+0

在這種情況下,'HAVING'子句是多餘的(無論如何你都不會得到任何不存在的id的行,所以沒有必要將它們過濾掉) – Piskvor

+0

@Piskvor:它說''1'''' 0'。這意味着Joe的結果中不包含存在但沒有***重複***的記錄。 – MatBailie

+1

@Piskvor:'HAVING'子句過濾出ID只出現一次的實例,因此不會重複。 –

1

如果你的問題是關於MySQL,那麼這將做到:

廣告3:SELECT COUNT(*),id FROM ProductComapny GROUP BY id會給你每個ID的出現次數的計數數據庫

(順便說一句 「ProductCom AP NY」?)

廣告2:這取決於您的業務邏輯 - 您想保留哪個?

廣告1:ALTER TABLE ProductComapny ADD PRIMARY KEY(id);

(是的,MySQL的/ MSSQL的區別很重要:IIRC以上既不是MSSQL有效的代碼),刪除重複項

+0

我認爲你的查詢是有效的TSQL – JNK

+0

@JNK:我不確定在SELECT查詢中組合函數和非組字段的組合;那曾經是一個僅限於MySQL的怪癖。可能它現在在TSQL中實現了嗎? (IDK) – Piskvor

+1

@Piskovr - 只要您按非聚合字段**進行分組,就始終允許使用TSQL **。 Mysql允許從表GROUP BY col1中選擇col1,col2,COUNT(*),而TSQL則不允許。 – JNK

0

一種方法是將它們複製到臨時表,從主表中刪除所有重複項,將數據從temp複製到main。

插入件插入不是Temptable
選擇ID,名稱
從ProductComapny
組由ID,名稱
具有COUNT(*)> 1

從ProductComapny
刪除其中id在(選擇ID來自TempTable)

插入到ProductComapny
選擇ID,名稱
from TempTable

這應該有效。
之後,您可以在ID字段上設置主鍵,因爲不會有更多副本。

1

如果你強制mysql添加主鍵,它將刪除所有重複以便能夠接管,你可以強制關鍵字忽略忽略警告的表的替代。

ALTER IGNORE TABLE ProductComapny ADD PRIMARY KEY (id);