Обновите все значения столбца с другим значением столбца в той же строке, за исключением случаев, когда повторяется запись - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь заменить все значения столбца имени пользователя на значения столбца электронной почты в той же строке, например:

UPDATE members_member
SET username = email

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

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Вам не нужно делать все это в одном запросе.Иногда это упрощает выполнение нескольких запросов с помощью tmpTables.

CREATE TABLE tmpUpdateEmails AS SELECT DISTINCT email, members_member_id FROM members_member;
UPDATE members_member m 
INNER JOIN tmpUpdateEmails e ON m.members_member_id = e.members_member_id
SET m.username = e.email;
DROP TABLE IF EXISTS tmpUpdateEmails;
0 голосов
/ 24 декабря 2018

Это обновит строки, содержащие уникальные электронные письма:

UPDATE members_member m
SET username = email 
WHERE username IN (
  SELECT 
    MIN(username) 
  FROM 
    members_member 
  GROUP BY 
    email
  HAVING
    COUNT(*) = 1
  );

Это обновит строки, которые содержат уникальные электронные письмаи строки с именами пользователей, которые расположены в алфавитном порядке первыми для дубликатов электронных писем:

UPDATE 
  members_member
SET 
  username = email 
WHERE 
  username IN (
    SELECT MIN(username) FROM members_member GROUP BY email
  );
0 голосов
/ 24 декабря 2018

Вы можете ограничить обновление недублированными электронными письмами:

update members_member mm join
       (select mm2.email
        from members_member mm2
        group by mm2.email
        having count(*) = 1
       ) mme
     set mm.username = mm.email;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...