高效删除无唯一标识符的重复行
当数据表缺少唯一行标识符时,删除重复项可能是一项挑战。本文提供了一种有效的解决方案,用于删除重复行,同时保留第一次出现的行。
让我们来看一个包含重复行的表:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
删除重复行后的期望结果是:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
使用 CTE 和 ROW_NUMBER 的解决方案
此方法利用公共表表达式 (CTE) 和 ROW_NUMBER() 函数。CTE 根据特定顺序为每一行分配一个序列号 (RN),从而允许我们识别和消除重复项。
以下是带步骤说明的 SQL 查询:
<code class="language-sql">WITH CTE AS ( SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7], RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) -- 为 col1 定义的每个组内分配序列号 FROM dbo.Table1 ) DELETE FROM CTE WHERE RN > 1; -- 删除 RN 大于 1 的行(表示重复项)</code>
说明:
输出:
执行查询后,更新后的表将包含:
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
以上是如何在没有唯一标识符的情况下有效地从表中删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!