2009-09-07 3 views
4

Cela devrait être assez basique mais je ne peux pas le comprendre. Avoir une « valeurs » tableauValeur de copie MySql d'une ligne à l'autre

entity|attribute|value 

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

Comment définir la couleur de tous les chapeaux à être la même que la couleur de la chemise, de la même personne pour donner un franc chapeau rouge et un chapeau bleu sam.

Répondre

10

Je cherchais une solution à cela et je suis venu sur ce post. cependant l'exécution du SQL conduire à une erreur de syntaxe. J'ai remarqué - au moins dans la version 5 - mysql a une syntaxe différente pour cela.

la déclaration générale serait:

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

Merci. Celui-ci est certainement la bonne réponse. – James

1

subselects peuvent être ...

ensemble couleur chapeau d'une chemise au hasard d'une personne

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

écrit dans le navigateur, donc pas testé, mais vous pouvez voir une idée.

1

pour cette solution:

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

Cela suppose une entité peut avoir au plus 1 chemise.

3

En fait, vous ne pouvez pas utiliser une sous-sélection de la même table que vous voulez exécuter la mise à jour de sorte que la meilleure façon est d'utiliser une jointure.

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