更新值,其中count只有1

时间:2013-10-31 13:46:17

标签: mysql

我需要更新一个值,其中该行中的另一个字段在整个表中只出现一次。我写了以下查询,但它不起作用。我怎么写这个?

由于

UPDATE debiteuren_afleveradressen 

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

        SET nummer = 1 WHERE totalCount = 1;

3 个答案:

答案 0 :(得分:1)

您可以在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

答案 1 :(得分: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

答案 2 :(得分:0)

这是一种方式,它是你想要的直接翻译:

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

但是,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;