如果另一列有重复值,sql查询用相同的值替换列

Posted

技术标签:

【中文标题】如果另一列有重复值,sql查询用相同的值替换列【英文标题】:sql query to replace column with same values if another column has duplicate values 【发布时间】: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 戈登的回答对你不起作用吗? 【参考方案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

【讨论】:

以上是关于如果另一列有重复值,sql查询用相同的值替换列的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何查询出某一列中不同值出现的次数?

SQL group by:选择另一列有其最小值/最大值的值

怎么用SQL语句查数据库中某一列是不是有重复项

用 Pandas 将 DataFrame 中某些列和行的值替换为同一 DataFrame 中另一列的值

使用 dplyr [重复] 有条件地将一列中的值替换为另一列中的值

EXCEL 如何查询一个数据是不是在某一列中