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

标签 mysql sql

我有这样的数据

旧表


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

我想用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
 

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

最佳答案

我希望您先尝试自己的解决方案。

最初我分享这个想法:

  1. 首先你需要知道每个组的条目名称 最低优先级。为了知道每个的最小行 组只是谷歌它。这article可能会有用。
  2. 然后您需要在主表和主表之间创建一个内部连接 您刚刚从第 1 步 获得的匹配组表,然后更新 具有优先级大于最小优先级的行名称的每一行 相应组的。

最后想出一个你自己的解决方案并检查我在下面给出的解决方案:

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

关于mysql - 用相应组的最低元素的属性更新每个组的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44308553/

相关文章:

c# - 我怎么知道数据库中是否存在这样的值? (ADO.NET)

mysql - 自连接的 SQL 查询

mysql - on 子句中的未知列,即使该列存在

php - 在mysql中建立三张表的查询

php - PHP 中的 MySQL 查询问题

php - 从在 Woocommerce 中显示为列表的 SQL 查询获取订单

c# - XML 解析 : line 1, 字符 7,需要分号

MySQL 查询运行速度非常慢 - 但只有其中一些

php - mysql php 不同日期年份

sql - 如何找到SQL Server默认实例名?