2014-01-31 7 views
0

У меня есть следующий запрос выбора, который мне нужно преобразовать в запрос на удаление, чтобы удалить дубликаты.Запрос доступа в VB 2010

Проблема: я не могу заставить удаляемую часть работать. В построителе запросов это выбирает записи, которые мне нужно удалить.

SELECT [Field1], [Field2], [Field3], [Field4], COUNT([Field4]) AS CountOfDuplicates 
FROM MyTable 
GROUP BY [Field1], [Field2], [Field3],[Field4] 
HAVING (COUNT([Field4])>1) 

Изменение ВЫБРАТЬ УДАЛИТЬ вызывает ошибку «Missing предложении FROM»

Благодарности

+0

вы можете выбирать поля или столбцы, но вы удаляете строки, и вы НЕ МОЖЕТЕ удалить COUNT, который не существует в db. Чтобы «удалить» поле, используйте запрос UPDATE, чтобы установить для этих столбцов значение по умолчанию, равное 0 или «String.Empty», в зависимости от типа и допустимого значения. – Plutonix

+2

. Выбирает все строки с дубликатами. Если вы удалите их, они не будут дублироваться - это то, что вы хотите - но они также полностью исчезнут из таблицы, и я сомневаюсь в том, чего вы хотите. Одна запись из каждой дублирующей группы должна оставаться в таблице, я прав? – Palec

+0

Да, одна запись должна оставаться из записей с повторяющимися полями. –

ответ

0

Не то, что я хотел сделать изначально, но я остановился на этом варианте. Создал другую таблицу для удаления дубликатов с помощью SELECT * INTO table FROM table GROUP BY *

Это удаляет строки, которые являются дубликатами.

SELECT [Field1], [Field2], [Field3], [Field4] 
INTO tempTable 
FROM MyTable 
GROUP BY [Field1], [Field2], [Field3],[Field4]; 


DELETE * FROM MyTable; 

INSERT INTO MyTable SELECT tempTable.* FROM tempTable; 
Смежные вопросы