当前位置: 首页 > 面试题库 >

如何使用SQL查询从表中删除重复项

邓俊英
2023-03-14
问题内容

我有一张桌子,如下所示:

emp_name   emp_address  sex  matial_status  
uuuu       eee          m    s
iiii       iii          f    s
uuuu       eee          m    s

我想基于3个字段emp_name,emp_address和sex删除重复的条目。和我的结果表(删除重复项后)应类似于-

emp_name    emp_address   sex   marital_status
uuuu        eee           m     s
iiii        iii           f     s

我不记得如何为此编写SQL查询。任何人都可以帮忙吗?


问题答案:

看起来所有四个列值都是重复的,因此您可以执行以下操作-

select distinct emp_name, emp_address, sex, marital_status
from YourTable

但是,如果婚姻状况可能有所不同,并且您还有其他根据其选择的列(例如,您希望基于create_date列作为最新记录),则可以执行此操作

select emp_name, emp_address, sex, marital_status
from YourTable a
where not exists (select 1 
                   from YourTable b
                  where b.emp_name = a.emp_name and
                        b.emp_address = a.emp_address and
                        b.sex = a.sex and
                        b.create_date >= a.create_date)


 类似资料:
  • 当我要执行以下查询时: 我得到了错误: 消息102,级别15,状态1,第1行“,”附近的语法不正确。 编辑: 我要删除klantId 3。

  • 问题内容: 我需要从下表中删除半重复记录 对于存在的任何重复PID,我想删除最低得分记录。在上面的示例中,将删除ID 1。我试图提出一种不使用循环的方法,但确实很挣扎。 任何帮助,将不胜感激。 谢谢 问题答案:

  • 问题内容: 这个问题已经在这里有了答案 : 如何从MySQL中的多个表中删除? (7个答案) 2年前关闭。 我有4个表,每个表存储有关用户的不同信息。每个表都有一个带有user_id的字段,用于标识哪个行属于哪个用户。如果要删除用户,这是从多个表中删除该用户信息的最佳方法吗?我的目标是在一个查询中做到这一点。 查询: 问题答案: 您可以使用选项在表上定义外键约束。 然后,从父表中删除记录将从子表中

  • 问题内容: 这可能很简单,这是我的查询: 但这只会删除具有相同u.name和p.pic_id的行中的重复项。我想要这样,如果名称有任何重复,则只剩下其他行。这是一个奇怪的查询,但是总的来说,我如何将不重复项应用于SELECT子句的单个列? 问题答案: 任意选择保留最小的PIC_ID。另外,请避免使用隐式连接语法。

  • 问题内容: 我不想键入所有表的名称以删除所有表。一个查询有可能吗? 问题答案: 使用 INFORMATION_SCHEMA.TABLES 视图获取表列表。在select语句中生成Drop脚本,并使用Dynamic SQL将其删除: 系统表 版本 注意: 如果在表之间定义了任何定义,则首先运行以下查询以 禁用数据库中所有存在的内容。 有关更多信息, 请在此处检查 。

  • 问题内容: 没有人有一个优雅的sql语句来删除表中的重复记录,但前提是重复项的数量多于x个?因此,最多允许2或3个重复项,仅此而已? 当前,我有一条执行以下操作的select语句: 这很好用。但是现在,我只想删除那些重复超过2个的行。 谢谢 问题答案: with cte as ( select row_number() over (partition by dupcol1, dupcol2 ord