2013-10-31 73 views
1

我需要更新一個值,其中該行中的另一個字段只出現一次在整個表中。我寫了下面的查詢,但它不起作用。我怎麼寫這個?更新值其中計數只有1

感謝

UPDATE debiteuren_afleveradressen 

      SELECT COUNT(*) as totalCount 
      FROM debiteuren_afleveradressen 
      GROUP BY bedrijf 

     SET nummer = 1 WHERE totalCount = 1; 
+0

你可以給樣品記錄? –

+0

sqlfiddle可能會幫助 – Strawberry

+0

使用'HAVING totalCount = 1'選擇將只返回需要更新的記錄 – Sal00m

回答

0

只是胡亂猜測

UPDATE debiteuren_afleveradressen 
SET nummer = 1 WHERE bedrijf IN(SELECT bedrijf FROM 
(SELECT bedrijf FROM debiteuren_afleveradressen 
GROUP BY bedrijf HAVING COUNT(*)=1)as x) 

SQL Fiddle

+0

感謝您的努力,它給出了一個錯誤。也許我發佈的小提琴可以幫助嗎?錯誤:#1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'IN(SELECT bedrijf FROM(SELECT bedrijf FROM debiteuren_afleveradressen GROUP'at line 2)處使用正確的語法。 – Snuur

+0

@Snuur現在就試試。 – Mihai

0

這裏有一種方法,這是你想要什麼,而直接翻譯:

UPDATE debiteuren_afleveradressen 
    SET nummer = 1 
    WHERE bedrijf in (SELECT bedrijf 
         FROM debiteuren_afleveradressen 
         GROUP BY bedrijf 
         having count(*) = 1 
        ); 

Bu噸,MySQL有一個奇怪的限制,你必須這樣寫:

UPDATE debiteuren_afleveradressen 
    SET nummer = 1 
    WHERE bedrijf in (select bedrijf 
         from (SELECT bedrijf 
          FROM debiteuren_afleveradressen 
          GROUP BY bedrijf 
          having count(*) = 1 
          ) t 
        ); 

對於這種類型的查詢,MySQL可能有點低效。我會建議改寫它作爲一個join

UPDATE debiteuren_afleveradressen join 
     (SELECT bedrijf, count(*) as TotalCount 
     FROM debiteuren_afleveradressen 
     GROUP BY bedrijf 
     ) agg 
     on agg.bedrijf = debiteuren_afleveradressen.bedrijf and 
      TotalCount = 1 
    SET nummer = 1; 
+1

@Mihai。。。Thank you。I嘗試在每個可用的機會中忘記這種奇怪的現象 –

+0

這與Oracle和Tsql一樣嗎? – Mihai

+0

@Mihai ......根本沒有,他們也會正確地優化'in'形式(儘管我認爲最新版本的MySQL已經改善了這個問題)。 –

1

您可以使用在JOINUPDATE

UPDATE debiteuren_afleveradressen a 
JOIN (
    SELECT bedrijf, COUNT(*) as totalCount 
    FROM debiteuren_afleveradressen 
    GROUP BY bedrijf 
) b ON (a.bedrijf = b.bedrijf AND b.totalCount = 1) 
SET a.nummer = 1