如果另一列有重复值,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
与相同 phone
的 min_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查询用相同的值替换列的主要内容,如果未能解决你的问题,请参考以下文章
用 Pandas 将 DataFrame 中某些列和行的值替换为同一 DataFrame 中另一列的值