MySql UPDATE только одна из повторяющихся записей

У меня есть база данных клиентов. Существуют отдельные строки для платежного адреса и адреса доставки с флажком, обозначающим, что это такое; БА, СА. Многие записи установлены на 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'

person user512436    schedule 19.11.2010    source источник
comment
Можешь выложить схему своей таблицы?   -  person Jagmag    schedule 19.11.2010


Ответы (3)


...
LIMIT 0,1

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

person symcbean    schedule 19.11.2010

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

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

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

person Jaydee    schedule 19.11.2010

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

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

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

person JochenJung    schedule 19.11.2010