2013-10-17 19 views
0

如果有'name'和'address_1'的重複條目,但它不工作 - 像往常一樣,我正在嘗試更新MySQL表,以顯示列名'processed'爲'2'有點白癡..MySQL - 用COUNT更新,有可能嗎?

這裏就是我試圖

UPDATE `records` 
SET `processed`='2', `count` = (SELECT COUNT(`user`) 
FROM `records` 
WHERE `name`<>'' 
AND `address_1`<>'') 
WHERE `count`=> '1'; 

基本上,如果有一個以上的「名」和「ADDRESS_1」,那麼「處理」字段需要更新到「2」 ..

+0

對於將來的代碼:你不需要報價/反引號的列&表名。它們只會增加視覺混亂,並且只是讓語法錯誤發生的另一種方式。你需要他們的唯一原因是,如果你的名字是一個保留字,或者你在其中嵌入了空格或標點符號,並且這些是可怕的做法以避免。 –

+0

數據庫規範化的一個特性是不存儲計算值。考慮從記錄表中刪除計數字段。 –

+0

@AndyLester爲此歡呼!我總是想知道..但總是把它們放在 - 以防萬一 - 現在應該加快速度! :) –

回答

1

您可以使用這樣的查詢來返回重複的名稱和地址:

SELECT name, address_1, COUNT(*) cnt 
FROM records 
GROUP BY name, address_1 
HAVING COUNT(*)>1 

,然後加入這個查詢記錄表,並更新處理,以2其中加入柱成功:

UPDATE 
    records INNER JOIN (SELECT name, address_1, COUNT(*) cnt 
         FROM records 
         GROUP BY name, address_1 
         HAVING COUNT(*)>1) duplicates 
    ON records.name = duplicates.name 
    AND records.address_1=duplicates.address_1 
SET 
    `processed`='2', 
    `count` = duplicates.cnt 
WHERE 
    records.`name`<>'' 
    AND records.`address_1`<>'' 
+0

它出現了一個奇怪的錯誤'錯誤1052(23000):列'名稱'在where子句是模糊的前面沒有看到這一個.. –

+0

@ElliotReed是的,這兩個記錄和重複具有相同的列名和address_1,所以在where子句中,我們需要指定表名....現在應該修復... – fthiella

+0

啊優秀!我只是GOOGLE了它,並得到了相同的:)非常感謝你,這非常非常有用! –