2016-12-17 1 views
0

Mise à jour du nombre de termes fréquents dans un dictionnaire pour certains corpus. Impossible de faire dans une seule requête. Au lieu de cela, je rassemble les données de comptage dans une table temporaire, puis INSERT/UPDATE le dictionnaire. Vous vous demandez quelle serait la syntaxe correcte de UPDATE countInCorpus dans une seule commande.INSERT FROM SELECT MISE A JOUR SUR DUPLICATES UPDATE = count (*)

syntaxe actuelle:

INSERT INTO temp_table (name, countInCorpus) 
    SELECT name,count(*) AS theCount 
    FROM corpus 
    GROUP BY name having theCount > 9); 

INSERT INTO dict (name, countInCorpus) 
    SELECT name, countInCorpus 
    FROM temp_table ON DUPLICATE KEY UPDATE dict.countInCorpus=temp_table.countInCorpus; 

A défaut la syntaxe d'une étape (résultat "colonne inconnue 'theCount' dans la liste des champs"):

INSERT INTO dict (name, countInCorpus) 
    SELECT name,count(*) AS theCount 
    FROM corpus 
    GROUP BY name having theCount > 9 
    ON DUPLICATE KEY UPDATE dict.countInCorpus=theCount; 

Répondre

1

Utilisation VALUES():

INSERT INTO dict (name, countInCorpus) 
    SELECT name,count(*) AS theCount 
    FROM corpus 
    GROUP BY name havingtheCount > 9 
    ON DUPLICATE KEY UPDATE dict.countInCorpus = VALUES(countInCorpus); 
+0

travail. Merci. (notez qu'il y a une faute de frappe - la valeur de seuil est manquante sur la quatrième ligne theCount> 9) – user3127882