2016-02-27 18 views
0

我想在表中存在FieldA和FieldB相同的多條記錄時在表中標記記錄。選擇很容易,當然:更新桌面上的記錄count> 1

Select Count(*) from Table group by FieldA,FieldB having Count(*)>1 

現在,我願做一個更新,並設置FIELDA和FieldB爲NULL只有那些記錄。我認爲這是某種'加入',但這不是我非常熟悉的。有沒有一些相當簡單的方法來做到這一點?

回答

0

這裏有一種方法,使用臨時表與3個字段:MIN(id)場,其中idTable唯一或主鍵,FieldAFieldB

CREATE TEMPORARY TABLE tmp_fix AS 
SELECT MIN(id) AS id, FieldA, FieldB 
FROM Table GROUP BY FieldA, FieldB having Count(*)>1; 

然後,我們可以更新原始Table將所有複製FieldA, FieldBNULL除了具有最低ID(這是我們在tmp_fix表保存):

UPDATE Table t 
LEFT JOIN tmp_fix f ON t.FieldA = f.FieldA AND t.fieldB = f.FieldB 
SET t.FieldA = NULL, t.fieldB = NULL 
WHERE t.id <> f.id; 

嘗試此操作之前,您可能需要製作Table的副本!

+0

謝謝,當我看到這個時,我意識到我想要做的就是獨自留下第一個重複字段,並讓其他所有人將第一個重複的id傳遞給像'MatchedRecord'這樣的字段中的其他人。有沒有辦法來修改上面這樣做?上面的那個看起來會讓所有的記錄重新設置,並且這個變化實際上是更新了原始重複後的所有記錄以及原始重複的編號。 – user3649739

+0

沒錯,它是這麼做的,因爲你問了這個,但我有一個預感,你可能想要這個。我更新了答案。 – Kenney