2016-12-17 8 views
0

Обновление количества частых терминов в словаре для некоторого корпуса. Невозможно выполнить в одном запросе. Вместо этого я собираю данные count во временную таблицу, а затем INSERT/UPDATE словарь. Удовлетворение того, что будет правильным синтаксисом для UPDATE countInCorpus в одной команде.INSERT FROM SELECT UPDATE ON DUPLICATES UPDATE = count (*)

Текущий синтаксис:

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; 

В противном случае один шаг синтаксиса (что приводит к "неизвестный колонке 'theCount' в списке полей"):

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; 

ответ

1

Использование 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

за работой. Благодарю. (обратите внимание, что существует опечатка - пороговое значение отсутствует на четвертой строке theCount> 9) – user3127882