sql запрос на замену столбца с такими же значениями, если другой столбец имеет повторяющиеся значения - PullRequest
1 голос
/ 09 апреля 2020
У

есть таблица, подобная приведенной ниже:

id       Phone       
A        123456789        
B        123456789        
C        123456789        
D        989898987       
E        225897744        

Если номер телефона такой же, мне нужно, чтобы идентификатор был одинаковым, в первой таблице есть три идентификатора (A, B, C) для такое же количество. Мне нужно, чтобы это было связано либо с А, либо с Б, либо с C

id       Phone       
A        123456789        
A        123456789        
A        123456789        
D        989898987       
E        225897744 

Пожалуйста, помогите мне, я не очень осведомлен об этом типе сложного запроса, потому что я новичок. Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 09 апреля 2020

Вот запрос update для вашей цели, который будет работать на любой MySQL версии:

update mytable t
inner join (select phone, min(id) min_id from mytable group by phone) m
    on t.phone = m.phone and t.id <> m.min_id
set t.id = m.min_id

Это работает путем самостоятельного объединения таблицы с агрегированным запросом, который получает минимум id на phone: для строк, где id отличается от min_id того же phone, запрос обновляет id.

0 голосов
/ 09 апреля 2020

Возможно, вы ищете что-то подобное

select t2.id, t1.phone
from your_table t1
inner join (select min(id) as id, phone 
            from your_table 
            group by phone) t2 on t2.phone=t1.phone
0 голосов
/ 09 апреля 2020

Вы можете использовать оконные функции:

select min(id) over (partition by phone) as id, phone
from t;

Или отказаться от дубликатов:

select min(id) as id, phone
from t
group by phone;

Не вижу смысла хранить дубликаты в таблице, поэтому я не предлагаю update решение.

...