这应该是非常基本但我无法弄清楚。有一个表'值'
entity|attribute|value
frank - shirt - red
frank - hat - green
sam - shirt - blue
sam - hat - orange
如何将所有帽子的颜色设置为与衬衫颜色相同,同一个人给予坦率的红帽子和山姆蓝帽子。
答案 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')
假设一个实体最多可以有一件衬衫。