使用相应组的最低元素属性更新每个组的属性

时间:2017-06-01 13:13:21

标签: mysql sql

我有像

这样的数据

旧表


acc|name|group|priority
1  |aa  |g1   |1
2  |aa  |g1   |2
3  |aa  |g1   |2
4  |gg  |g2   |3
5  |gg  |g2   |4
6  |gg  |g2   |4
.  |.   |.    |.
xx |xx  |xx   |x
 

我想用sql更新名称到新表

新表

console.log(CKEDITOR.instances['content']);
    if (CKEDITOR.instances['content']) {
       try {
           CKEDITOR.instances['content'].destroy(true);
       } catch (e) { }
    }
    CKEDITOR.replace('content');
    CKEDITOR.instances['content'].setData(content);

在表格中,组g1中的名称必须更新为aa,组g1中的优先级最低。 您是否有任何想法更新所有具有最低优先级名称的组?

1 个答案:

答案 0 :(得分:1)

我希望你先尝试自己的努力。

最初我分享这个想法:

  1. 首先,您需要知道所持有的每个组的条目名称 最低优先级。为了知道每个的最小行 小组只是google它。这个article可能很有用。
  2. 然后你需要在主表和主表之间设置一个inner join 您刚从匹配组中获得的第1步表,然后进行更新 具有行优先级大于最小优先级的行的每一行 相应的小组。
  3. 最后找出你自己的解决方案并检查我正在给出的解决方案:

    UPDATE your_table YT 
    INNER JOIN 
    (
    SELECT 
    A.*
    FROM your_table A 
    INNER JOIN 
    (
        SELECT 
        `group` AS group_name,
        min(priority) AS min_priority
        FROM your_table
        GROUP BY `group`
    ) AS B 
    ON A.`group` = B.group_name
    AND A.priority = B.min_priority
    ) AS helper 
    ON YT.`group` = helper.`group`
    SET YT.name = helper.name 
    WHERE YT.priority > helper.priority;
    

    See Demo

    测试架构:

    create table your_table (
        acc int, 
        name varchar(30), 
        `group` varchar(30), 
        priority int
    );
    
    
    insert into your_table values(1,'aa','g1',1);
    insert into your_table values(2,'ff','g1',2);
    insert into your_table values(3,'ss','g1',2);
    insert into your_table values(4,'gg','g2',3);
    insert into your_table values(5,'uu','g2',4);
    insert into your_table values(6,'dd','g2',4);
    

    警告: group是mysql中的保留字。每当您使用任何保留字命名您的标识符时,您需要使用反引号(`)...Read more