SQL - borrar un solo registro con execute

   
Vista:

borrar un solo registro con execute

Publicado por joseba (4 intervenciones) el 18/01/2016 16:00:11
Hola amigos!

tengo esta consulta en sql desde vb6, cuando la ejecuto me borra todos los registros que cumplen las condiciones pero necesito que solo me borre uno de ellos, me podeis hechar una mano?

conn.Execute "DELETE * FROM mitabla where fecha=#" & Format(rst("fecha"), "mm/dd/yyyy") & "# AND articulo=" & rst("articulo") & " AND cantidad=" & rst("unidad"), adCmdText

he probado sustituyendo el * por un 1, pero no va
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

borrar un solo registro con execute

Publicado por leonardo_josue (877 intervenciones) el 18/01/2016 19:28:52
Hola Joseba:

En primer lugar, dinos con qué BD's estás trabajando... aunque la mayoría de los DBMS's pueden basarse en SQL, hay diferencias importantes entre cada uno de ellos.

Ahora bien, dependiendo del motor de BD's sería la forma en que puedes hacerlo... por ejemplo, con MySQL, basta poner un LIMIT 1 para que te elimine sólo el primer registro que cumpla la condición. Checa este ejemplo:

Supongamos que tienes esta tabla:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM tabla;
+------+--------+--------+
| id   | campo1 | campo2 |
+------+--------+--------+
|    1 | uno    |      1 |
|    2 | uno    |      1 |
|    3 | uno    |      1 |
|    4 | cuatro |      4 |
+------+--------+--------+
4 rows in set (0.00 sec)

si haces una eliminación con la condición CAMPO1 = 'uno' y CAMPO2 = 1, entonces te elimina tres registros, que es tu caso:
1
2
3
4
5
6
7
8
9
10
mysql> delete from tabla where campo1 = 'uno' and campo2 = 1;
Query OK, 3 rows affected (0.13 sec)
 
mysql> SELECT * FROM tabla;
+------+--------+--------+
| id   | campo1 | campo2 |
+------+--------+--------+
|    4 | cuatro |      4 |
+------+--------+--------+
1 row in set (0.00 sec)

Ahora bien, si pones en el DELETE un LIMIT 1, entonces sólo te elimina el primer registro que cumpla la condición:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql> SELECT * FROM tabla;
+------+--------+--------+
| id   | campo1 | campo2 |
+------+--------+--------+
|    1 | uno    |      1 |
|    2 | uno    |      1 |
|    3 | uno    |      1 |
|    4 | cuatro |      4 |
+------+--------+--------+
4 rows in set (0.00 sec)
 
mysql> delete from tabla where campo1 = 'uno' and campo2 = 1 LIMIT 1;
Query OK, 1 row affected (0.08 sec)
 
mysql> SELECT * FROM tabla;
+------+--------+--------+
| id   | campo1 | campo2 |
+------+--------+--------+
|    2 | uno    |      1 |
|    3 | uno    |      1 |
|    4 | cuatro |      4 |
+------+--------+--------+
3 rows in set (0.00 sec)

Insisto, esta solución sólo es válida para MySQL, si estás utilizando otro DBMS deberías de buscar una alternativa similar, o en su defecto, hacerlo mediante subconsultas utilizando una llave unica.

Saludos.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

borrar un solo registro con execute

Publicado por joseba (4 intervenciones) el 18/01/2016 19:37:33
gracias por la respuesta pero como comento arriba es para sql access.

no tengo llave unica en esa tabla, ese es el problema, que la tabla es asi y no tengo opcion de hacerlo de otra forma.
lo puedo hacer abriendo un recordset y moviendome al primer refistro y eliminarlo pero la aplicacion se hace muy lenta ya que tiene que hacerlo miles de veces .

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

borrar un solo registro con execute

Publicado por leonardo_josue (877 intervenciones) el 18/01/2016 22:54:41
Hola de nuevo Joseba:

En ningún lado veo que hayas mencionado en tu primer post que se trataba de ACCESS... no sé, igual y estoy algo ciego :S. tu pones esto:

1
tengo esta consulta en sql desde vb6,

SQL no es una BD's, es un lenguaje de consultas, así como vb6 tampoco es un motor de BD's, es un lenguaje de programación.

Tal como te mencioné en mi post, la idea era buscar una alternativa al LIMIT para tu BD's... (aunque en estricto sentido ACCESS ni siquiera puede considerarse una Base de Datos como tal). En este caso, la alternativa es utilizar TOP... la sintaxis es algo extraña, pero sería más o menos así:

1
DELETE FROM (SELECT TOP 1 * FROM tu_tabla WHERE tus_condiciones)

Puedes checar esta página como referencia:

http://stackoverflow.com/questions/15492004/delete-top-2-in-access

Si continuas con problemas, pregúntale a SAN GOOGLE por otras alternativas. Él generalmente atiende a tus preguntas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar