我有这样的数据
旧表
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。 您是否有任何想法以最低优先级更新名称的所有组?
最佳答案
我希望您先尝试自己的解决方案。
最初我分享这个想法:
- 首先你需要知道每个组的条目名称 最低优先级。为了知道每个的最小行 组只是谷歌它。这article可能会有用。
- 然后您需要在主表和主表之间创建一个
内部连接
您刚刚从第 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;
测试架构:
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/