这应该是非常基本的,但我不能弄明白。有一个表“值”的MySQL从一个行复制值到另一个
entity|attribute|value
frank - shirt - red
frank - hat - green
sam - shirt - blue
sam - hat - orange
如何设置所有的帽子颜色的是一样的球衣颜色,同样的人给弗兰克Red Hat和SAM蓝色帽子。
这应该是非常基本的,但我不能弄明白。有一个表“值”的MySQL从一个行复制值到另一个
entity|attribute|value
frank - shirt - red
frank - hat - green
sam - shirt - blue
sam - hat - orange
如何设置所有的帽子颜色的是一样的球衣颜色,同样的人给弗兰克Red Hat和SAM蓝色帽子。
我一直在寻找一个解决方案,这一点,我想出了这个职位。 但是,运行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 = '...'
子选择可能是......一些人
update values set value = (select value from values where entity = v.entity and attribute = 'shirt' limit 1) from values v where v.attribute = 'hat'
中写道浏览器,所以没有测试的一个随机的衬衫
集帽子的颜色,但可以查看的想法。
试试这个:
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')
这是假设一个实体可以有至多衬衫。
事实上所以最好的办法是使用一个连接不能使用子查询从要运行更新的同桌。
UPDATE users AS target
LEFT JOIN users AS source ON source.id = 1
SET target.name = source.name
WHERE target.id = 2;
感谢。这一个绝对是正确的答案。 – James 2012-12-06 20:44:36