MySql ОБНОВЛЕНИЕ только одной из повторяющихся записей - PullRequest
2 голосов
/ 19 ноября 2010

У меня есть база данных о клиентах.Есть отдельные строки для адреса выставления счета и адреса доставки с флажком, указывающим, что это;BA, SA.Многие из записей установлены на BA, поэтому у меня есть дубликаты для каждого клиента.Мне нужно установить дубликат записи для SA.Я попробовал это, но он обновил ВСЕ записи, которые были дублированы.Вместо этого я хочу обновить только одну из повторяющихся записей;

UPDATE customer1 AS C1 JOIN
(
SELECT Ca.user_id, C2.CID, Ca.address_type FROM
customer1 AS Ca JOIN
customer2 AS C2 ON CC.user_id = C2.CID
GROUP BY Ca.user_id
    HAVING COUNT(*) > 1
) AS C2a ON
C1.user_id = C2.CID
SET C1.address_type = 'SA'

Ответы [ 3 ]

2 голосов
/ 19 ноября 2010
...
LIMIT 0,1

Обратите внимание, что, как уже говорили другие, в вашей базе данных никогда не должно быть дублирующихся строк - это означает, что ваша схема неверна. Кроме того, вы получите предупреждение, используя LIMIT без ORDER BY

0 голосов
/ 19 ноября 2010

Вам следует нормализовать схемы таблиц, чтобы избежать дублирования данных.

То есть я бы предложил таблицу адресов со всеми адресами и расширил бы таблицу клиентов полями BA_address и SA_address, указывая наэти адреса.

Если вам теперь нужно «продублировать» запись из BA в SA, вы просто помещаете тот же addressID внутри поля SA, как в поле BA.

0 голосов
/ 19 ноября 2010

Что касается базы данных, дубликаты записей неразличимы.

Я думаю, что ваш лучший вариант - добавить автоматически генерируемый идентификатор (см. Auto_increment) к каждой записи. Затем вы можете однозначно идентифицировать запись, которую хотите обновить.

Другой альтернативой является копирование данных из одного из дубликатов, удаление их, вставка одной записи, а затем вставка другой с необходимым изменением.

...