2014-02-15 1 views
0

У меня есть таблица с полными дублирующимися данными на основе нескольких столбцов. Я придумал этот запрос, чтобы найти все дублированные строкиКак обновить набор повторяющихся строк в базе данных на основе нескольких столбцов

select * 
from polls 
group by server_id, product_id, poll_date 
having count(*) > 1; 

Как обновить эти результаты и установить поле «updated_by» к «админ».

Я попытался сделать это, но он не работает для меня :(

update polls 
set updated_by='admin' 
group by server_id, product_id, poll_date 
having count(*) > 1; 

Спасибо за вашу помощь

+0

привет. можете ли вы дать код sql для создания своей таблицы и вставки некоторых строк выборки? –

ответ

0

Вы должны быть в состоянии присоединиться к вашей SELECT с UPDATE.

UPDATE `polls` AS `p1` 
INNER JOIN (
    SELECT * 
    FROM `polls` 
    GROUP BY `server_id`, `product_id`, `poll_date` 
    HAVING COUNT(*) > 1 
) AS `p2` 
    ON `p2`.`server_id` = `p1`.`server_id` 
    AND `p2`.`product_id` = `p1`.`product_id` 
    AND `p2`.`poll_date` = `p1`.`poll_date` 
SET `p1`.`updated_by` = 'admin'; 

Конечно, было бы лучше напрямую подключиться к первичному ключу (если он у вас есть).

+0

Я получаю эту ошибку: ERROR 1052 (23000): Column 'updated_by' в списке полей неоднозначно – Candice

+0

О, извините, мой плохой. Конечно, мы должны указать, какая таблица должна использоваться для обновления. Я обновил свой ответ. – Fleshgrinder

+0

спасибо, что сработали! – Candice

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