2009-09-07 83 views
4

这应该是非常基本的,但我不能弄明白。有一个表“值”的MySQL从一个行复制值到另一个

entity|attribute|value 

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

如何设置所有的帽子颜色的是一样的球衣颜色,同样的人给弗兰克Red Hat和SAM蓝色帽子。

回答

10

我一直在寻找一个解决方案,这一点,我想出了这个职位。 但是,运行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 = '...' 
+0

感谢。这一个绝对是正确的答案。 – James 2012-12-06 20:44:36

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'

中写道浏览器,所以没有测试的一个随机的衬衫

集帽子的颜色,但可以查看的想法。

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') 

这是假设一个实体可以有至多衬衫。

3

事实上所以最好的办法是使用一个连接不能使用子查询从要运行更新的同桌。

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