2009-04-30 28 views
8

Estoy tratando de eliminar todos los 3.000 elementos, excepto los más recientes, en una tabla. La tabla tiene 105,000 registros.SQl Eliminar top 100 de la tabla

Estoy intentando esto, pero se genera un error de sintaxis incorrecta.

delete tRealtyTrac where creation in(select top 103000 from tRealtyTrac order by creation) 
+4

¿no lo hizo ningún otro aviso de que 105.000 menos 103.000 = 2.000? Dijo: "Estoy intentando eliminar todos los 3.000 elementos, pero los más recientes, en una tabla". Estaba a punto de eliminar 1000 registros más de los que quería. –

Respuesta

18

La sintaxis de eliminación va a ser ligeramente diferente de la que tiene. Un ejemplo sería:

DELETE FROM tRealtyTrac 
WHERE creation in(select top 103000 creation from tRealtyTrac order by creation) 

Observe cómo es la palabra clave "de". Esto es decir que queremos eliminar de la tabla llamada tRealtyTrac

El único problema que preveo con esto es, que son probablemente va a querer No utilice la creación ...

lugar:

DELETE FROM tRealtyTrac 
WHERE someuniqueidcolumnlikeakeyofsomesort in(select top 103000 someuniqueidcolumnlikeakeyofsomesort from tRealtyTrac order by creation) 

De lo contrario, puede eliminar más de lo previsto.

+0

La creación podría ser la misma en los miembros 103001º y 103000º. Seleccionaría la ID de PK superior y verificaría en ella. – Eric

+0

gracias chicos- Usé este comando combinando tus respuestas elimina tRealtyTrac donde id en (selecciona 103000 id superior desde tRealtyTrac ordena por creación) – Bryan

4

La consulta interna tiene que ser:

seleccione la parte superior 103000 creación de ...

+0

Esto es correcto. Gracias. Marcó la respuesta de Brian como correcta porque se proporciona la sintaxis y la explicación completas. – Bryan

2

Una manera muy fácil de hacer esto:

  1. selecciona Superior 3001 desde tRealtyTrac orden por creación desc

  2. tomar la última fecha de uno a continuación, eliminar tRealtyTrac donde la creación < 'thedateyoufound'

Pero Andy tiene una buena idea también. ;)

+0

Buena idea :) Eso también funciona. – Bryan

1

Prueba esto:

DELETE FROM tRealtyTrac WHERE creation IN (SELECT top 103000 * FROM tRealtyTrac ORDER by creation) 

se le olvidó los campos en tRealtyTrac (utilicé un asterisco para seleccionar todo, pero se puede hacer una lista de ellos o sólo uno). También olvidó la cláusula FROM.

+0

tu afirmación falla porque la creación no puede estar EN TODOS los atributos de tRealtyTrac. Aunque, usted mencionó que uno tiene que cambiar el asterisco, la declaración le da un conocimiento erróneo a un lector. – Tim

3

En cuanto a mí, CTE es la mejor solución para la eliminación ordenada

;WITH records_delete AS (
    select top 103000 creation 
    from tRealtyTrac 
    order by creation) 
DELETE records_delete 
Cuestiones relacionadas