MySql将值从一行复制到另一行

时间:2009-09-07 05:35:47

标签: mysql

这应该是非常基本但我无法弄清楚。有一个表'值'

entity|attribute|value

frank - shirt - red 
frank - hat   - green
sam   - shirt - blue
sam   - hat   - orange

如何将所有帽子的颜色设置为与衬衫颜色相同,同一个人给予坦率的红帽子和山姆蓝帽子。

4 个答案:

答案 0 :(得分:12)

我正在寻找解决方案,我想出了这篇文章。 但是运行sql导致语法错误。

参考mysql文档 http://dev.mysql.com/doc/refman/5.0/en/update.html 我注意到 - 至少在版本5中 - mysql有不同的语法。

一般声明是:

update table t1, table t2 
set t1.field1 = t2.field2, ..., t1.fieldN = t2.fieldN
where t1.someid = t2.someid and t1.fieldX = '...' and t2.fieldY = '...'

答案 1 :(得分:5)

实际上,您无法使用要运行更新的同一个表中的子选择,因此最好的方法是使用连接。

UPDATE users AS target
LEFT JOIN users AS source ON source.id = 1
SET target.name = source.name
WHERE target.id = 2;

答案 2 :(得分:1)

子选择可能是......

设置一个人的随机衬衫的帽子颜色

update values set value = (select value from values where entity = v.entity and attribute = 'shirt' limit 1) from values v where v.attribute = 'hat'

在浏览器中写道,所以没有经过测试,但你可以查看一个想法。

答案 3 :(得分:1)

尝试一下:

UPDATE table 
SET value = res.value
FROM table INNER JOIN table res
ON table.entity = res.entity
WHERE (table.attribute = 'hat') AND (res.attribute = 'shirt')

假设一个实体最多可以有一件衬衫。