sql - 删除带有警告的重复项

标签 sql sql-server duplicate-data

我有一个带有rowID,经度,纬度,businessName,url,标题的表。可能看起来像:

rowID | long  | lat |  businessName | url | caption

  1      20     -20     Pizza Hut   yum.com  null

如何删除所有重复项,但仅保留一个具有URL的副本(第一优先级),或者如果另一个不具有URL的标题(第二优先级),则保留具有标题的副本,并删除其余重复项?

最佳答案

这是我的循环技术。这可能会因为没有成为主流而被否决-我对此很满意。

DECLARE @LoopVar int

DECLARE
  @long int,
  @lat int,
  @businessname varchar(30),
  @winner int

SET @LoopVar = (SELECT MIN(rowID) FROM Locations)

WHILE @LoopVar is not null
BEGIN
  --initialize the variables.
  SELECT 
    @long = null,
    @lat = null,
    @businessname = null,
    @winner = null

  -- load data from the known good row.  
  SELECT
    @long = long,
    @lat = lat,
    @businessname = businessname
  FROM Locations
  WHERE rowID = @LoopVar

  --find the winning row with that data
  SELECT top 1 @Winner = rowID
  FROM Locations
  WHERE @long = long
    AND @lat = lat
    AND @businessname = businessname
  ORDER BY
    CASE WHEN URL is not null THEN 1 ELSE 2 END,
    CASE WHEN Caption is not null THEN 1 ELSE 2 END,
    RowId

  --delete any losers.
  DELETE FROM Locations
  WHERE @long = long
    AND @lat = lat
    AND @businessname = businessname
    AND @winner != rowID

  -- prep the next loop value.
  SET @LoopVar = (SELECT MIN(rowID) FROM Locations WHERE @LoopVar < rowID)
END

关于sql - 删除带有警告的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/150891/

相关文章:

mysql - 根据另一列中的最大值选择列

sql-server - "Adding a value to a ' 日期时间 ' column caused an overflow."

sql - 使用SQL Server JSON_VALUE搜索JSON数组

mysql - 插入之前检查mysql表数据

mysql - 检测重复英文名

sql - 关键字 'with' 附近的语法不正确。

jquery - codeigniter 文本框 id 中的 jquery 自动完成功能不起作用

regex - 按跨多个目录的内容查找重复文件

sql - 合并复制错误: You do not have permission to run 'SP_TRACE_GENERATEEVENT'

sql-server - 如何控制 Entity Framework 中的参数嗅探和/或查询提示?