FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
pregunta SQL interesante
Hola de nuevo mundo delphi, tengo una buena pregunta para ustedes, en codigo SQL, que instruccion se utilizaria para saber si existe una tabla?, por ejemplo, tenemos una base de datos que tiene 3 tablas (tabla1,tabla2 y tabla3) si queremos buscar una tabla4, que instruccion se utilizaria?, si es que la hay, o de que otra manera se podría saber si existe o no.
|
#2
|
||||
|
||||
Podes lanzar un select contra el diccionario de datos.
En firebird, por ejemplo, podes averiguarlo así:
Si devuelve 1, la tabla existe, si devuelve 0 la tabla no existe. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
||||
|
||||
Para SQL Server sería algo así:
Una optimización que sirve para todos los SGBD's es: (1) Utilizar un TOP 1. (2) Preguntar por un sólo campo en lugar de por todos (*)
__________________
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. |
#4
|
||||
|
||||
En MySql sería:
Si te regresa un registro es que existe, si no te regresa ningún registro es que no existe. En Paradox no creo que haya más esperanza que:
Como verás, cada SGDB funciona distinto por lo que siempre es bueno especificar con cuál estás trabajando. // Saludos |
#5
|
|||
|
|||
Gracias por interesarse en mi pregunta, pero falta una cosa mas, me hablan de SQL Server y Firebird, pero como seria eso mismo en una base de datos en Access? .
|
#6
|
||||
|
||||
Cita:
y captura el error similar a como te han explicado para Paradox.
__________________
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-2005 a las 10:20:06. |
#7
|
|||
|
|||
Hola a todos:
Para aquellos que les gusta el Oracle y para darle un valor agregado al hilo (jajaja), o bien, como breviario cultural va la consulta en Oracle:
Saludos
__________________
Ernesto R. |
#8
|
||||
|
||||
...sigo diciendo que un Count(*) es muy costoso (sea la BD que sea...).
Si sólo se quiere saber si algo existe, ¿Porqué contarlos todos?
__________________
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. |
#9
|
||||
|
||||
Cita:
// Saludos |
#10
|
|||
|
|||
Hola:
Sobre lo que dices Neftali de que no se debe contar los registros ¿cómo le hago para que la consulta me regrese solo un registro en el caso de que la tabla exista?. En Oracle se agrega:
Pero ¿ y en otros motores?. Ya que me queda claro que si la tabla no trae muchos registros recupera el campo rápidamente, de lo contrario yo siempre me he ido con el conteo de los registros. Saludos
__________________
Ernesto R. |
#11
|
||||
|
||||
Cita:
En el caso particular que estamos tratando, supongo que será tan costoso contar un solo campo como contar todos los campos del único registro probable que podemos obtener. También es de esperar que los diseñadores de los motores, sabiendo el extendido uso que se hace de count(*) como método para contar implementen en el optimizador algún mecanismo para contar solo las cabeceras, por ejemplo en algún índice, tal como ya habia especulado roman. En todo caso, quien tenga tiempo de probarlo, que analice los planes de ejecución que proponen los principales motores y que nos cuente sus hallazgos. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#12
|
||||
|
||||
Cita:
Cita:
// Saludos |
#13
|
||||
|
||||
Cita:
Suponiendo que queremos "buscar si existe en una tabla TABLA si existe un registro cuyo campo TABLENAME es igual a tabla4"; Que es lo que inicialmente se quería... (1) El * significa que cuentas todos los campos de la tabla. Porqué contarlos todos si sólo necesitas contar;En ese caso utiliza la PK. Ésta mejora considero que es "insignificante" y supongo que el SGBD debe optimizarla... (pero eso no es escusa para no hacerlo bien -el pensar que alguien va a venbir detrás a optimizar...-) (2) El Count (ese sí me parece importante); Si queremos buscar un registro y hacemos un SELECT TOP 1...WHERE..., el SGBD buscará el primero y cuando lo encuentre parará de buscar (me imagino yo, ya que le hemos dicho que sólo busque uno...), en cambio si le decimos que haga un COUNT..WHERE deberá recorrer necesariamente TODA la tabla (no hay otra forma de contar cuantos hay). Ésta era mi apreciación. Ya se que en algunos casos se puede optimizar (por ejemplo si existe índice por el campo de WHERE), pero el coste en sí es mucho mayor y en tablas grandes se puede notar mucho. Por tanto sigo manteniendo que hacer un Count para saber si algo existe es incorrecto. ACLARA1: Que puede ser que si se cumplen unas condiciones y seguramente si el SGBD optimiza acabe siendo igual de rápido, Vale!! ACLARA2: ...pero y si no se optimiza o no se dan las condiciones...
__________________
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. |
#14
|
||||
|
||||
Cita:
__________________
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. |
#15
|
||||
|
||||
Cita:
Ya me imagino que el count de todas las tablas (sin WHERE) está almacenado en algun sitio, el problema es que sí hay un WHERE (inicialmente el WHERE era el nombre de la tabla: 'TABLA4'), por lo tanto ese valor no hay forma de tenerlo precalculado. Si hay WHERE hay que contar...
__________________
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. |
|
|
|