简体   繁体   English

将组中的列更新为最小值

[英]Update columns to min value from a group

i have database like this 我有这样的数据库

 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 

How can I update all the newid to min(unique id) from group by sirname 我如何将所有的newid group by sirname更新为min(unique id)

The result i want: 我想要的结果:

 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

Try this: 尝试这个:

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

Try this UPDATE JOIN 试试这个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
;

For this query to work very fast, make sure you have a compound index on sirname and uniqueid. 为了使该查询非常快速地工作,请确保您在sirname和uniqueid上具有复合索引。

If you do not have such an index, then run this beforehand: 如果没有这样的索引,请事先运行:

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

Give it a Try !!! 试试看 !!!

If BD.'s doesn't work, try: 如果BD。无法使用,请尝试:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM