2017-02-15 2 views
1

Мои table1 выглядит так: MySql как использовать UPDATE с HAVING?


id name_co name_r temp sld 1 name1 1 ... ... 2 name2 1 ... ... 3 name2 1 ... ... 4 name2 1 ... ... 5 name3 1 ... ... 6 name2 1 ... ...
мне нужно увеличивать name_r, если имеется два или более одинаковых name_co. Чтобы быть так:

  
id name_co name_r temp sld 
1 name1  1  ... ... 
2 name2  1  ... ... 
3 name2  2  ... ... 
4 name2  3  ... ... 
5 name3  1  ... ... 
6 name2  4  ... ... 

Я пробовал разные варианты, и я пришел к этому:

UPDATE table1 
     SET name_r = name_r + 1 
     WHERE (SELECT COUNT(*) 
     GROUP BY name_co 
     HAVING name_co > 1) 

Запрос работает и возвращает 0 строк, но я знаю, что в некотором роде он неправ, но я не могу Не поймите, что. Может ли кто-нибудь помочь? (И немного объяснения, так что я лучше понял)

+0

Последние две колонки-видимому, не имеют никакого отношения к этому вопросу, поэтому я не ясно, почему они включены выше – Strawberry

+0

я попробовал: 'SELECT COUNT (*) AS test FROM table1 GROUP BY name_co HAVING test> 1' для объединения с 'UPDATE table1 SET name_r = name_r + 1'. Для 'UPDATE' работать с' HAVING'. Я знаю, что этот запрос плохо подготовлен. –

+0

Если вы предоставили sqlfiddle или rextester, я уверен, что кто-то предоставит решение. Но оставьте без внимания колонки – Strawberry

ответ

1
--updated intended targets 
UPDATE table1 
SET name_r = name_r + 1 
WHERE id IN 
(
    -- return those ids again (to avoid the mysql #1093 error) 
    SELECT id 
    FROM 
    ( -- get all the ids for those names 
     SELECT id 
     FROM table1 
     WHERE name_co IN 
     ( -- get all names that have more than one id 
      SELECT name_co 
      FROM  table1 
      GROUP BY name_co 
      HAVING COUNT(id) > 1 
     ) 
    ) a 
) 
+0

Этот запрос возвращает: '# 1093 - Вы не можете указать таблицу табуляции 'table1' для обновления в разделе FROM. –

+0

Обновленный ответ на основе руководства от http://stackoverflow.com/a/9843719/1327961 – user1327961

+0

Этот возвращает: '# 1248 - Каждая производная таблица должна иметь свой собственный псевдоним'. Так что я попытался это: 'ОБНОВЛЕНИЕ таблица1 SET name_r = name_r + 1 WHERE ID IN ( SELECT, идентификатор ИЗ ( SELECT, идентификатор ОТ table1 AS прочего GROUP BY ID, name_co HAVING COUNT (name_co)> 1 ) AS alias ) 'Он работает, но возвращает 0 строк. –

Смежные вопросы