Как обновить таблицу с более чем одним значением - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть таблица refs с цитатами (AU NAMES, которые разделены; в одном поле авторами) и таблица с именем aunames с AU-NAMES в каждой строке.Теперь я хотел бы обновить свою таблицу aunames, указав общее количество авторов для каждой цитаты.

 rec  ID  NAME  AUCOUNT
  1   3   AU1   
  2   3   AU2 
  ...
  ...

Как я могу это сделать?(auname_copy - это копия auname.) Я попытался:

 update aunames 
 set aucount = (select count(rec) 
                from refs 
                join aunames_copy on refs.id=aunames_copy.id  
                GROUP BY refs.id) ;

Но я получаю ошибку:

[Err] 1242 - Подзапрос возвращает более 1 строки

Когда я пытаюсь работать только с одной строкой, она работает.

update aunames 
set aucount = (select count(rec) 
               from refs 
               join aunames_copy on refs.id=aunames_copy.id 
               where refs.id='1'  
               GROUP BY refs.id ) 
where id='1'; 

Как пройти через все строки?Спасибо

1 Ответ

1 голос
/ 19 сентября 2019

Вы можете использовать синтаксис UPDATE ... JOIN ... SET:

UPDATE aunames a
INNER JOIN (
    SELECT r.id, count(rec) cnt
    FROM refs r
    INNER JOIN aunames_copy c ON r.id = c.id  
    GROUP BY r.id
) x ON x.id = a.id
SET a.aucount = x.cnt

Примечание: если, как прокомментировано @ MadhurBhaiya , вы создали таблицу aunames_copy как копию исходной таблицы aunames, ваш запрос может быть упрощен как:

UPDATE aunames a
INNER JOIN (SELECT id, count(rec) cnt FROM refs GROUP BY id) x ON x.id = a.id
SET a.aucount = x.cnt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...