2017-06-01 35 views
1

我有一個像更新每個組與對應的組

舊錶數據的最低元素的屬性屬性


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中的名稱必須更新爲aa,並且最低優先級y在g1組中。 你有沒有想法以最低優先級更新所有名稱的組?

+0

將所有信息添加爲文本或內嵌圖像,而不是鏈接 – Jens

+0

對不起,我發現新舊錶格圖像沒有區別。請[編輯]您的問題,以文字形式顯示您的表格。如果您將每行文本縮進四個空格,它們將顯示爲表格。 –

+0

我剛編輯我的問題。請再看一遍。謝謝。 –

回答

1

我希望你會先嚐試一下你自己的努力。

起初我分享的想法:

  1. 首先,你需要知道每個持有 最低優先級組的條目的名稱。爲了知道每個 組的最低行,只需谷歌它。這article可能會有用。
  2. 然後,你需要1匹配組做出inner join您的主表和你剛剛從一步拿到了 表之間,然後更新 每一行與行的名義持有的優先級大於最小相應組的優先級 。

終於拿出了自己的解決方案,並與解決方案,我正下方給檢查:

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