1

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

谢谢

UPDATE debiteuren_afleveradressen 

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

        SET nummer = 1 WHERE totalCount = 1;
4

3 回答 3

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
于 2013-10-31T13:58:22.630 回答
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小提琴

于 2013-10-31T13:55:21.377 回答
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;
于 2013-10-31T13:57:14.573 回答