SQL Server 2008 Express:在 table 中查找相似记录
SQL Server 2008 Express : find similar records in a table
这是我关于 SQL Server 2008 Express 数据库的第一个问题,包含文章、数量、价格等。不幸的是,当我第一次加载数据时出现以下错误:
我为(几乎)每篇非常相似但性质不同的文章创建了两条记录。
这是一个例子:
- TUTO510088.9X3
- TUTO510088,9X3
唯一不同的字符是 ,
和 .
。有没有办法将所有这些文章 SELECT
改为 DELETE
带逗号的文章并留下其他文章?
请注意,不同字符的位置不固定,可能在右数第3个,也可能在中间
delete from my_table
where my_column like '%,%';
您可以使用自联接来完成:
delete T2
from TableName T1 JOIN
TableName T2 on Replace(T1.article,'.','')=Replace(T2.article,',','')
where T2.article like '%,%'
演示在 SQL Fiddle
您可以通过将 delete T2
替换为 select T2.*
来检查哪些记录将被删除
首先搜索那些有重复值的记录,然后删除它们。
select B.*
--delete B
from
(select [column], replace(replace([column], ',', ''), '.', '') from [yourtable]
group by [column] having count(1) > 1)A
JOIN [yourtable] B
ON A.[column] = B.[column] and A.[column] like '%,%'
replace(replace([column], ',', ''), '.', '')
将获取没有 ,
和 .
的记录,而 count(1) > 1
将获取重复的记录。
这是我关于 SQL Server 2008 Express 数据库的第一个问题,包含文章、数量、价格等。不幸的是,当我第一次加载数据时出现以下错误:
我为(几乎)每篇非常相似但性质不同的文章创建了两条记录。
这是一个例子:
- TUTO510088.9X3
- TUTO510088,9X3
唯一不同的字符是 ,
和 .
。有没有办法将所有这些文章 SELECT
改为 DELETE
带逗号的文章并留下其他文章?
请注意,不同字符的位置不固定,可能在右数第3个,也可能在中间
delete from my_table
where my_column like '%,%';
您可以使用自联接来完成:
delete T2
from TableName T1 JOIN
TableName T2 on Replace(T1.article,'.','')=Replace(T2.article,',','')
where T2.article like '%,%'
演示在 SQL Fiddle
您可以通过将 delete T2
替换为 select T2.*
首先搜索那些有重复值的记录,然后删除它们。
select B.*
--delete B
from
(select [column], replace(replace([column], ',', ''), '.', '') from [yourtable]
group by [column] having count(1) > 1)A
JOIN [yourtable] B
ON A.[column] = B.[column] and A.[column] like '%,%'
replace(replace([column], ',', ''), '.', '')
将获取没有 ,
和 .
的记录,而 count(1) > 1
将获取重复的记录。