我需要更新一個值,其中該行中的另一個字段只出現一次在整個表中。我寫了下面的查詢,但它不起作用。我怎麼寫這個?更新值其中計數只有1
感謝
UPDATE debiteuren_afleveradressen
SELECT COUNT(*) as totalCount
FROM debiteuren_afleveradressen
GROUP BY bedrijf
SET nummer = 1 WHERE totalCount = 1;
我需要更新一個值,其中該行中的另一個字段只出現一次在整個表中。我寫了下面的查詢,但它不起作用。我怎麼寫這個?更新值其中計數只有1
感謝
UPDATE debiteuren_afleveradressen
SELECT COUNT(*) as totalCount
FROM debiteuren_afleveradressen
GROUP BY bedrijf
SET nummer = 1 WHERE totalCount = 1;
只是胡亂猜測
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)
這裏有一種方法,這是你想要什麼,而直接翻譯:
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;
@Mihai。。。Thank you。I嘗試在每個可用的機會中忘記這種奇怪的現象 –
這與Oracle和Tsql一樣嗎? – Mihai
@Mihai ......根本沒有,他們也會正確地優化'in'形式(儘管我認爲最新版本的MySQL已經改善了這個問題)。 –
您可以使用在JOIN
您UPDATE
:
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
你可以給樣品記錄? –
sqlfiddle可能會幫助 – Strawberry
使用'HAVING totalCount = 1'選擇將只返回需要更新的記錄 – Sal00m