2016-02-21 1 views
0

kb_nid est une clé unique et une table c_nodes; comprennent kb_nid, runState, champs startedTimemysql - sur la mise à jour de la clé en double, champ de la table jointe

Je veux avant la mise à jour de la table, comparer ancienne table mais obtenir cette erreur:

"SQL Error (1054): Unknown column 'cn.runState' in 'field list'"

INSERT INTO c_nodes(kb_nid,runState,startedTime) 
    SELECT n.id, n.nState>10 as runState, NULL as startedTime 
    FROM node n 
    LEFT JOIN c_nodes cn ON n.id =cn.kb_nid 
    GROUP BY n.id 
    ON DUPLICATE KEY UPDATE startedTime=IF(cn.runState<>VALUES(runState) ,NOW(),cn.startedTime) 

Je ne vois aucun problème.

Modifier http://sqlfiddle.com/#!9/8f8a84

Merci pour l'aide.

+0

Si vous voulez quelqu'un pour vous aider, vous feriez mieux de schéma à condition de toutes les tables impliquées. – Jacobian

+0

En guise de supposition, essayez de supprimer les alias "cn" du bloc "ON DUPLICATE KEY UPDATE ..." – Jacobian

+0

merci @Jacobian si j'ai supprimé cn, je ne peux pas comparer l'ancien état; En attendant modifier pour sqlfiddle mon message, s'il vous plaît vérifier à nouveau. – JeWoPeR

Répondre

0

Je l'ai corrigé avec une sous-requête. Je suppose que la raison d'erreur est GROUP BY

INSERT INTO c_nodes(kb_nid,runState,startedTime) 
SELECT n.id,runState,startedTime FROM (
SELECT n.id, n.nState>10 as runState, NULL as startedTime 
FROM node n 
GROUP BY n.id) tt 
LEFT JOIN c_nodes cn ON tt.id =cn.kb_nid 
ON DUPLICATE KEY UPDATE startedTime=IF(cn.runState<>VALUES(runState) ,NOW(),cn.startedTime) 

Ref: https://stackoverflow.com/a/14533265/3952108