Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   eliminar solo un registro (https://www.clubdelphi.com/foros/showthread.php?t=65565)

ingabraham 24-12-2009 19:43:19

eliminar solo un registro
 
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?
Código SQL [-]
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):

Código SQL [-]
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:

Código SQL [-]
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

Se me ocurre algo....
 
Cita:

Empezado por Chris (Mensaje 350006)
Talvez con DISTINC ... :rolleyes:

Código SQL [-]
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....

Código SQL [-]
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 (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

Cita:

Empezado por ingabraham (Mensaje 350216)
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 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...:)


La franja horaria es GMT +2. Ahora son las 06:29:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi