![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿Huecos en una tabla?
¿Cómo puedo obtener los huecos que existen en una tabla enumerada sin tener que recorrerla? ¿Alguna función?
Ej: 1 Articulo 1 2 Articulo 2 4 Articulo 4 5 Articulo 5 Me debería devolver 3. |
#2
|
||||
|
||||
Bueno, eso no es un "hueco en una tabla"
![]() Para hacer lo que quieres tendrás que tener unas reglas fijas en ese campo, si TODOS los artículos se llaman "Articulo " 1, 2, 3, etc. entonces podrás hacer una búsqueda ordenada. Si son códigos numéricos será más fácil, obviamente. Si tienes "Articulo 1", "Otro artículo", "artículo x"... me temo que es algo imposible.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
Dependiendo del motor puede hacerse. En PostgreSQL tienen una función que genera datos al vuelo:
__________________
El malabarista. |
#4
|
||||
|
||||
Creo que no es eso lo que pregunta, ya que la generación automática "aleatoria" está disponible en casi todas las herramientas de manejo de bases de datos.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
||||
|
||||
Cita:
Esta genera datos basados en un rango (no aleatorio) y devuelve una tabla como si se hubiera llenado manualmente. https://www.citusdata.com/blog/2018/...-generate-sql/
__________________
El malabarista. |
#6
|
||||
|
||||
Pues eso, que no es lo que está buscando
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#7
|
||||
|
||||
Suponiendo que la estructura de latabla es:
Código:
ARTICULOS( ID INTEGER, DESCRIPCION VARCHAR(100) )
|
#8
|
||||
|
||||
Yo creo que podrías sacerlo con algo así; Creo que todo lo que he utilizado existe en todos los motores de SQL (es estandard de SQL).
Tal vez cambie cómo se definen las variables, pero la sintaxis debe ser similar. Suponiendo que la tabla se llame TABLA1 y tenga estos valores: Cita:
Para ello se crea una temporal con todos los posibles, entre el maximo y mínimo existente en TABLA1, y luego se miran los que faltan.
En la imagen, lo primero es TABLA1 y lo segundo la consulta anterior ejecutada: ![]()
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 23-06-2022 a las 09:43:48. |
#9
|
|||
|
|||
Hola, ante todo muchas gracias a todos por vuestras respuestas.
Quizás no me explique bien. Lo que necesito es ver que saltos hay en la numeración en un campo de una tabla (número factura). Lo necesito para ver si existen saltos en la numeración que le asigna un usuario a las facturas recibidas y/o emitidas en un programa contable. He probado la solución de duilioisola porque la veía más simple pero la ejecución de la consulta es muy lenta unos 20s en unos 2000 registros y falla cuando hay dos saltos consecutivos (1,2,5,6,7...). La solución de Neftali no la he probado pero la veo un poco complicada y creo que no obtendré más rapidez en los resultados, porque hay que ir insertando valores en una tabla. Tengo clientes con millones de registros. ¿Alguna otra solución? |
#10
|
||||
|
||||
Entonces, tienes una tabla con un campo numérico.
Código:
1 2 4 5 6 8 9
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
|||
|
|||
Exactamente eso.
|
#12
|
||||
|
||||
Este SQL te devuelve una lista de números entre 1 y 100.
Con esto como base restrinjo el rango al min/max id de la tabla articulos. De este rango devuelvo solo los que no existen en la tabla de artículos. Se parece a la respuesta de Neftali, pero para Firebird. El único problema es que debido a la recursividad solo permite rangos de 1024 registros.
Con respecto a la velocidad, lo he probado con una tabla con 800 registros indexados por el ID y no ha tardado nada. |
#13
|
||||
|
||||
Si puedes crear un procedimiento que te devuelva la lista de números ya no hay problemas.
Lo he probado en una base con 23.000 registros y ha tardado 31ms La tabla tiene un índice único por el campo ID.
|
#14
|
|||
|
|||
Propongo esta opción...Procedimiento almacenado en firebird
|
#15
|
|||
|
|||
Muchas gracias a todos.
Al final me he decantado por la solución de duilioisola, iba un poco lento porque los campos por los que tenía que buscar no tenían un índice. Lo he creado y va perfecto. |
#16
|
|||
|
|||
Buenas noches,
Hace un tiempo tuve que hacer lo mismo porque un cliente cada vez que eliminaba un registro quería que el código que quedaba libre se utilizara nuevamente.
Aclaro que esto en su momento fue hecho en Oracle, pero como el código es SQL puro se pude implementar en cualquier motor de base de datos Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Mostrar barras en Tchart sin huecos | cocute | Varios | 1 | 26-01-2015 14:45:36 |
Problema con Stored Procedure para actualizar tabla con datos de otra tabla. | Adrian Murua | MySQL | 4 | 04-02-2012 02:54:49 |
Huecos en una tabla | digongo | SQL | 5 | 20-12-2007 19:03:14 |
Recorrer Tabla, contar registro repetidos y escribir totales en otra Tabla | Lucas_diaz1810 | Conexión con bases de datos | 1 | 25-12-2006 13:04:34 |
Tabla con huecos | NickName | Firebird e Interbase | 5 | 23-09-2003 19:42:09 |
![]() |
|