【问题标题】:sql query to replace column with same values if another column has duplicate values如果另一列有重复值,sql查询用相同的值替换列
【发布时间】:2020-04-09 16:38:04
【问题描述】:

有一个如下表:

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

如果电话号码相同,我需要第一个表中的 id 相同,相同号码有三个 id(A、B、C)。我需要这与 A 或 B 或 C 相关

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

请帮助我,因为我是初学者,所以不太了解这种类型的硬查询。提前致谢

【问题讨论】:

  • 您如何决定 A 为 123456789 而不是 B 或 C。是否有一个日期字段指示该顺序。还是您希望它是字母数字最小值?另外请删除不必要的标签。您正在使用 SQL Server 或 MySQL,而不是两者。
  • 如果可能,基于上次更新,先生,如果父母有两个学生,则需要这样,两个学生的父母 ID 应该相同,但父母 ID 不能不同,这样每个父母都有多个ids取决于有多少孩子的。但是由于电话号码是相同的,我们可以使用它来使我需要的电话号码的父 ID 相同
  • 我明白了。我不明白为什么您决定为 123456789 的所有实例选择 A 而不是 B 或 C。
  • 不像 x 和 y 是兄弟姐妹,他们的父母有两个登录名 x1 和 y1,在数据库中 x 和 y 的共同点之一是电话号码。由于父母只需要登录 x 和 y,我需要为 x 和 y 制作 x1 或 y1 广告父 ID
  • 戈登的回答对你不起作用吗?

标签: mysql sql group-by sql-update


【解决方案1】:

你可以使用窗口函数:

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

或者省去重复:

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

我认为没有理由将重复项存储在表中,因此我不建议使用 update 解决方案。

【讨论】:

  • 嗨,如果父母有两个学生,则需要这样,两个学生的父母 ID 应该相同,但父母 ID 不能不同,因此每个父母都有多个 ID,取决于孩子的数量.但是由于电话号码是相同的,我们可以使用它来使我需要的电话号码的父 ID 相同
【解决方案2】:

这里有一个 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

这通过使用聚合查询自连接表来实现,该聚合查询每个 phone 获得最小值 id:对于 id 与相同 phonemin_id 不同的行,查询更新id

【讨论】:

  • 对不起,先生,此查询使具有相同电话号码的学生的父母 ID 相同,但问题是相同的父母 ID 不在这些学生的父母中。正如我对 x 和 y 所说的那样,我需要为 x 和 y 为 x1 或 y1 以外的任何其他内容制作 x1 或 y1 广告父 ID
【解决方案3】:

也许你正在寻找类似的东西

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多