【发布时间】:2011-12-14 01:49:32
【问题描述】:
我有一张简单的表格,但表格很长(几百万或几行)。 该表包含许多我需要删除的配对行。 行数据不明显! 有单行(没有成对的行) 表对由连接到第三列的两列中的交叉信息定义。 我希望每个数据标识符只有一行。 因此,我需要 myTable 在满足条件的情况下立即收缩。 我试过了:
myIndexColumn = Column1 + Column2 + Column3
myReversedIndexColumn = Column2 + Column1 + Column3
CREATE NONCLUSTERED INDEX myIndex1 ON myDB.dbo.myTable (
myIndexColumn ASC
)
CREATE NONCLUSTERED INDEX myIndex2 ON myDB.dbo.myTable (
myReversedIndexColumn ASC
)
DELETE FROM myDB.dbo.myTable
WHERE myIndexColumn in (SELECT myReversedIndex FROM myDB.dbo.myTable)
问题是两个配对数据都被删除而不是留下一行数据。
显然,这是因为DELETE 仅在运行整个事务后才提交更改。
如果我可以说服 MS SQL 2008 R2 Express 版本在满足条件时提交 DELETE,那么 SELECT 子句将在要删除的每一行测试中输出一个较短的列表。
我该怎么做?
【问题讨论】:
-
据我所知,只有那些 myReversedIndexColumn = myIndexColumn 的行应该被删除,这是 Column1 = Column2 的地方。你是说 所有 成对的行都被删除了
-
我刚刚仔细检查,它正在删除所有配对数据(大部分表格)。发生这种情况是因为存在具有特定反向索引的行就足以删除一行。我要做的是有一个更新的(按操作 - 逐行)列表以供选择,以便决定成功删除。虽然一般情况是每行的索引不同,但有少数行的索引相等 (0.006%)。
-
那么,你想去掉 0.006 的大小写吗?
-
不,我需要这些行。我只想删除~一半的数据。只有每对行中的第二行。
-
这是关于删除半重复的。忘记 column1=column2,我可以控制它。重复定义为好像有两行,其中 row1.column3=row2.column3 和 row1.column1=row2.column2 和 row2.column1=row1.column2 。在这种情况下如何删除 dup?
标签: sql sql-server commit execute sql-delete