PDA

Ver la Versión Completa : eliminar solo un registro


ingabraham
24-12-2009, 19:43:19
hola necesito eliminar solo un registro en un delete.

ej.

juan 500
luis 900
juan 500
juan 500



digamos un solo juan 500 y quedaria
juan 500
luis 900
juan 500


necesito q haga esto el sql. gracias

Ñuño Martínez
24-12-2009, 21:40:16
¿Te refieres a esto?
DELETE FROM tabla WHERE campo='valor';
Es algo muy sencillo, como ves.

darwinhdez
26-12-2009, 20:08:20
porque eliminar 1 de 3 registros iguales, hay alguna valor diferente para cada uno?

yapt
26-12-2009, 21:12:57
Casi todas las bases de datos tienen una columna "GENERADA" que puedes utilizar para numerar las filas obtenidas, o bien, funciones "WINDOW" que hacen esta función:

Esto funcionaria en PostgreSQL (versión 8.4 y superior):

DELETE FROM
(
SELECT ROW_NUMBER AS NUMLINEA, A.* FROM TABLA A
WHERE
NOMBRE = 'JUAN'
AND NUMERO = 500
ORDER BY ROWNUM
)
WHERE NUMLINEA = 1

Sustituyendo ROW_NUMBER por ROWNUM, funcionaría también en ORACLE (desde la versión 8, si no recuerdo mal).

(*) Cuidado, no está testeado.

Saludos.

ingabraham
04-01-2010, 17:12:59
utilizo firebird 2.0, como seria en ese caso,
osea; el busca todos los repetidos entonces el 1 de ellos es el q elimina.

Chris
04-01-2010, 21:06:01
Talvez con DISTINC ... :rolleyes:

delete from TABLA1
where ID not in ( SELECT DISTINC ID, NOMBRE, NUMERO from TABLA1)

Algún redactor técnico que pueda explicar en español la anterior SQL?

PD.: La anterior consulta no se puede, lo acabo de recordar :(
Si usaras FB 2.1 podrías hacerlo con tablas anidadas.

Chris
04-01-2010, 21:13:36
Talvez con DISTINC ... :rolleyes:

delete from TABLA1
where ID not in ( SELECT DISTINC ID, NOMBRE, NUMERO from TABLA1)

Algún redactor técnico que pueda explicar en español la anterior SQL?

PD.: La anterior consulta no se puede, lo acabo de recordar :(
Si usaras FB 2.1 podrías hacerlo con tablas anidadas.

Somo ingenieros y estamos para ingeniar....

Si no se puede la consulta, entonces la solución sería concanetar los campos....

delete from TABLA1
where (cast(tabla1.ID as varchar(12)) || tabla1.nombre || cast(tabla1.numero as varchar(12)) <> ( SELECT DISTINC (cast(ID as varchar(12))
|| NOMBRE || cast(NUMERO as varchar(12))) as campos_combinado from TABLA1)

se podra?

rgstuamigo
07-01-2010, 16:23:50
Sin criticar y menospreciar lo que intentas hacer , en lo personal creo que es un error de diseño de tu base de dato,;) pues creo que siempre deberia haber un campo diferente y unico en cada tupla (http://es.wikipedia.org/wiki/Tupla) (fila ó registro) de los registros de tu tabla, pues para eso estan los primary Key, o en tal efecto podrias añadir un campo por el cual se pueda diferenciar entre una u otra tupla.
Es como si en el club Delphi hubiera dos o mas Usuarios de Nick "ingabraham" y yo le dijera por ejemplo a Roman:
"Oye Roman quiero que me elimines al usuario de nick ingabraham.." pero entonces él me va responder:
"¿Pero cual de todos?"
Entonces quedamos en duda o si este o aquel por que no existe ninguna diferencia entre todos.;)
¿Que hacemos ahora?..pues esto significa que no se tomo en cuenta esa situacion al momento de diseñar la Base de dato.
Es por eso que en club no vas a encontrar dos miembros con el mismo Nick, siempre debe haber algo que haga la diferencia.
Ahora quisas podrias solucionar (Como te dije anteriormente) agregando un campo a tu tabla, que podria ser por ejemplo una fecha que indique la hora de insercion del registro, puede ser tambien un campo numerico secuencial que indique la secuencia o lugar que le toco a ese registro, o simplemente agregar campo primary key.
De esa forma le podras indicar al servidor que registro especificamente debes eliminar, haciendo mas practica y mas veloz tu consulta SQL.
Espero no haberte liado mas...:D;)
Saludos...:)

ingabraham
08-01-2010, 00:01:23
si, ya lo habia hecho, me toco agregar un campo de mas.
pero existen tablas donde hay estas duplicidades como

n:n
hay q sacar una tercera para evitar redundancias

rgstuamigo
08-01-2010, 13:41:36
si, ya lo habia hecho, me toco agregar un campo de mas.
pero existen tablas donde hay estas duplicidades como

n:n
hay q sacar una tercera para evitar redundancias
Por supuesto que en una Relacion de cardinalidad (http://es.wikipedia.org/wiki/Modelo_entidad-relaci%C3%B3n#Cardinalidad_de_las_relaciones) n:n ó n:m por regla se tiene que crear una tabla intermedia, pero hay que tener en cuenta que la regla dice que dicha tabla tendra como primary key dos columnas, una traida de la primera tabla y la otra de la segunda.En otras palabra roba como llave primaria a cada una de las llaves primaria de la relacion n:n o tambien escrito *:*; de tal manera que cada tupla va ser unica. ;)
Saludos...:)