将列更新为组中的最小值

时间:2012-02-14 14:49:40

标签: php mysql

我有这样的数据库

 uniqueid |     name    | newid | sirname
----------+-------------+-------+---------
     A1   |     Adam    |  NULL |  Danny 
     A2   |  Adam (Lee) |  NULL |  Danny 
     A5   |  Adam (Koh) |  NULL |  Danny
     B4   |     Bruce   |  NULL |    CK
     B6   |  Bruce (Lee)|  NULL |    CK 

如何从newid

更新所有min(unique id)group by sirname

我想要的结果:

 uniqueid |     name    | newid | sirname
----------+-------------+-------+---------
    A1    |     Adam    |   A1  |  Danny
    A2    |  Adam (Lee) |   A1  |  Danny
    A5    |  Adam (Koh) |   A1  |  Danny
    B4    |     Bruce   |   B4  |   CK
    B6    | Bruce (Lee) |   B4  |   CK

3 个答案:

答案 0 :(得分:2)

试试这个:

UPDATE table a 
SET    new_id = (SELECT MIN(unique_id) 
                 FROM   table b 
                 WHERE  b.sirname = a.sirname)

答案 1 :(得分:0)

尝试此UPDATE JOIN

UPDATE
    (
        SELECT sirname,MIN(uniqueid) min_uniqueid
        FROM mytable GROUP BY sirname
    ) A
    INNER JOIN mytable B
    USING (sirname)
SET
    B.newid = A.min_uniqueid
;

要使此查询工作得非常快,请确保在sirname和uniqueid上有复合索引。

如果您没有这样的索引,请事先运行:

ALTER TABLE mytable ADD INDEX sirname_uniqueid_ndx (sirname,uniqueid);

试一试!!!

答案 2 :(得分:-1)

如果BD。不起作用,请尝试:

Update tableName As a 
  Set newid = 
    (Select uniqueid 
      From tableName As b 
      Where b.sirname = a.sirname 
      Order By uniqueid 
      Limit 1)