У меня есть простая таблица, но длинная (несколько миллионов или строк).
Таблица содержит много парных строк, которые мне нужно удалить.
Данные строки не различаются!
Есть одиночные строки (у которых нет парной строки)
Пары таблиц определяются перекрестной информацией в двух столбцах, соединенных с третьим столбцом.
Я хотел бы иметь только одну строку каждого идентификатора данных.
Поэтому мне нужно, чтобы 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
вывело бы более короткий список в каждом тесте строки для удаления.
Как мне это сделать?