2017-04-19 152 views
1

这里是我的MySQL表:复制值从一行到所有行具有相同组ID

ID | groupID | value 
------------------------------ 
1 | 1   | 
2 | 1   | 0.34353 
3 | 1   | 
4 | 2   | 
5 | 2   | 0.23232 
6 | 3   | 
7 | 3   | 
8 | 3   | 1.23234 
9 | 3   | 

我想可用values各组复制到具有相同组ID的所有行,使我的决赛桌看起来像这样:

ID | groupID | value 
------------------------------ 
1 | 1   | 0.34353 
2 | 1   | 0.34353 
3 | 1   | 0.34353 
4 | 2   | 0.23232 
5 | 2   | 0.23232 
6 | 3   | 1.23234 
7 | 3   | 1.23234 
8 | 3   | 1.23234 
9 | 3   | 1.23234 

没有固定数量的一个组有多少行。我怎样才能做到这一点?

+0

呃......这样的事情。 '更新\'表\'SET \'值\'=(选择\'价值\'从\'表\'WHERE \'值\'!='')WHERE \'groupID \''... Eeks,中间感到困惑。但是这样的事情。 –

+0

你想选择那样或需要更新? – Rams

+0

@Rams看起来像OP想要更新。 –

回答

2

您可以使用更新连接完成此操作。将您的初始表加入子查询,该子查询标识每个groupID的非NULL值。引入该信息后,将非NULL值列更新为子查询中的值。

UPDATE yourTable t1 
INNER JOIN 
(
    SELECT groupID, MAX(value) AS value 
    FROM yourTable 
    GROUP BY groupID 
) t2 
    ON t1.groupID = t2.groupID 
SET t1.value = t2.value 
WHERE COALESCE(t1.value, '') = '' 

更新:

看来,你可能有空字符串丢失的数据,和/或在除了NULL。在这种情况下,MAX()仍然应该拾取不丢失的数据,但我适当地更改了WHERE子句。

+0

我们应该使用JOIN吗?有没有其他方式没有使用JOIN? –

+1

@PraveenKumar在MySQL中允许自我加入更新,这是我将使用的方法。您也可以使用相关的子查询进行更新,但这可能比这更慢,而且难以阅读。 –

+0

谢谢!我试过了(和其他一些类似的疑问),但由于某种原因,它不起作用:/ – rayne

相关问题