sql server 删除重复的首字母缩略词

标签 sql sql-server

我有一个如下所示的表格:

acronym | word
FCN     | FCN
FCN     | Fourth Corner Neurosurgical Associates
FHS     | FHS
HW      | HW

如您所见,有些首字母缩略词具有匹配的单词,有些则没有。我想保留具有匹配单词的首字母缩略词。对于没有匹配单词的首字母缩略词,我想保留首字母缩略词本身。我希望结果表看起来像:

acronym | word
FCN     | Fourth Corner Neurosurgical Associates
FHS     | FHS
HW      | HW

我还想不出一种方法来实现这一点。可能按“首字母缩略词”分组并选择“单词”,但什么算法可以决定删除“FCN”或“第四角神经外科协会”

最佳答案

假设不能有任何“坏”词:

DELETE myTable
  FROM myTable del
 WHERE [acronym] = [word]
   AND EXISTS ( SELECT *
                  FROM myTable lw -- Longer Word
                 WHERE lw.[acronym] = del.[acronym] 
                   AND Len(lw.[word]) >  Len(lw.[acronym]) )

或者,当存在读取例如的“坏”其他(较长)记录时,您是否想避免删除SQL|SQLSQL|发生奇怪的事情

重读这个问题,我现在怀疑您是否真的想要DELETE这些记录,或者只是想从中SELECT过滤掉定制记录。在后一种情况下,您必须使用(包括 mellamokb 的建议)

SELECT [acronym], [word]
  FROM myTable mt
 WHERE [acronym] <> [word]
    OR NOT EXISTS ( SELECT *
                      FROM myTable lw
                     WHERE lw.[acronym] = mt.[acronym] 
                       AND lw.[word] <> lw.[acronym] )

关于sql server 删除重复的首字母缩略词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768571/

相关文章:

PHP,下拉菜单和搜索表单,如何传递变量来选择查询

历史表状态中的 SQL 查询

sql - 使用 PostgreSQL,我如何获取数组中某个项目的第一列的值?

sql-server - 删除 SQL Server 2005 记录而不记录日志

sql-server - 在 bigquery 中交叉应用等效的 MSSQL 运算符

sql - 从 PIVOT 获得结果后进行 GROUP BY

sql-server - 在 SQL Server 中的创建触发器中调用存储过程

c# - 查询从每个组中删除早于 n 个事件日期的记录

SQL 查找非空列

sql - SQL查询中的可选参数