SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.10.2019 15:44:13

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 296

Обновление повторяющихся значений

Подскажите, пожалуйста. Столкнулся со следующей проблемой.
Есть запрос

SELECT group_concat(id), COUNT(*), NAME, donor FROM s_products group by donor having `donor` != '-' AND `donor` != ''  AND COUNT(*) > 1


Получается поле donor содержит ссылку на товар. Но так получилось, что у нескольких товаров одна и та же ссылка. Мне нужно изменить колонку donor = '' но только у тех товаров у которых  COUNT(*) > 1


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#2 24.10.2019 17:40:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5633

Re: Обновление повторяющихся значений

приведите пример тестовых данных из нескольких строк с указанием какие строки нужно изменить

Неактивен

 

#3 24.10.2019 18:06:58

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 296

Re: Обновление повторяющихся значений

https://yadi.sk/i/2BqIX8aeyaljPw
ИЗМЕНИТЬ НУЖНО donor


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#4 24.10.2019 18:17:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5633

Re: Обновление повторяющихся значений

Всё равно не понятно, что вы хотите получить.
Обновление это update (т.е. изменение данных таблицы), а вы приводите результат select запроса.
Сделайте пример в виде создания таблицы
create table ..
наполнения тестовых данных
insert into ..
и что должно получиться в конечном итоге

Неактивен

 

#5 24.10.2019 18:30:32

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 296

Re: Обновление повторяющихся значений

CREATE TABLE `s_products` (
    `id` INT(11) NOT NULL AUTO_INCREMEN
    `name` VARCHAR(500) NOT NULL,
    `donor` VARCHAR(255) NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=22432
;

insert info (id, name, donor) VALUES (1, 'Валенки', 'http://ссылка1');
insert info (id, name, donor) VALUES (2, 'Рукавички', 'http://ссылка2');
insert info (id, name, donor) VALUES (3, 'Горчичники', 'http://ссылка3');
insert info (id, name, donor) VALUES (4, 'Мыло', 'http://ссылка2');
insert info (id, name, donor) VALUES (5, 'Сало', 'http://ссылка4');


 


Вот получается на каждый товар ДОЛЖНА БЫТЬ своя уникальная ссылка.
Но на деле сейчас в базе у нескольких РАЗНЫХ товаров одна ОДИНАКОВАЯ ССЫЛКА.
Я сделал селект, чтобы узнать, у каких товаров, а теперь мне нужно убрать эту ссылку у тех товаров, для которых, одна общая ссылка.
Те. убрать ссылку у Мыла И Руковичек, чтобы получилось так

insert info (id, name, donor) VALUES (2, 'Рукавички', '');
insert info (id, name, donor) VALUES (4, 'Мыло', '');

Так как по одной и той же ссылке не могут быть и Мыло и Рукавички


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#6 24.10.2019 18:46:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5633

Re: Обновление повторяющихся значений

update `s_products` JOIN (SELECT donor FROM `s_products` GROUP BY 1 having count(*)>1) t1 USING(donor)
set donor = '';


https://sqlinfo.ru/articles/info/19.html

Неактивен

 

#7 25.10.2019 12:30:42

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 296

Re: Обновление повторяющихся значений

Огромное нескончаемое спасибо


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#8 25.10.2019 13:06:30

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 392

Re: Обновление повторяющихся значений

В статье есть

{INSERT|REPLACE} INTO t col = (SELECT * FROM (SELECT ... FROM t...) AS t1);

Впервые вижу такую форму записи. Может есть детальная информация по данной форме?
Тут ничего подобного не обнаружил

Неактивен

 

#9 01.11.2019 18:56:16

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5633

Re: Обновление повторяющихся значений

https://dev.mysql.com/doc/refman/8.0/en … tions.html

Суть в том, что сначала from подзапрос материализуется во временную таблицу, т.о. при изменении данных чтение происходит из временной таблицы, а не из той, которая меняется.

Неактивен

 

#10 01.11.2019 19:32:13

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 392

Re: Обновление повторяющихся значений

Я вообще говорил про "... INTO t col = (..."
Може правильно

{INSERT|REPLACE} INTO t  ... WHERE col = (SELECT ...

Неактивен

 

#11 02.11.2019 08:45:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5633

Re: Обновление повторяющихся значений

klow написал:

Я вообще говорил про "... INTO t col = (..."

hmm
спасибо, исправил

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson