Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Respuesta incorrecta en Firebird

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Respuesta incorrecta en Firebird Responder citando

Me he dado cuenta que en una base de datos Firebird muchas veces las consultas no funcionan adecuadamente. Por ejemplo: Yo tengo una base de datos en la que tengo guardadas las películas y discos de música que tengo grabados; por aquello de ahorrar espacio y agilizar las consultas, las imágenes las he puesto en otra tabla y hago esta consulta para recuperar los datos:
Código:
SELECT A.Titulo, A.Disco, A.Orden, A.Anyo, A.Duracion, A.Director, A.Interpretes, A.Estilo, A.Origen, A.Estado, A.Subtitulos, A.Esp, A.Ing, A.Otros, B.Caratula FROM Peliculas A, Imagenes B WHERE A.Registro = 100 AND A.Registro = B.Registro AND B.Tabla = 'P'

¿Que me está pasando? Cuando busco una ficha que no tiene imagen (campo carátula), me devuelve un query vacío aunque el resto de los datos sí existan. ¿Cómo puedo evitar esto sin tener que hacer un query previo de comprobación? Cuando tenía la base de datos en Paradox no tenía este problema.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Creo que no es un error de Firebird, asi debe ser la respuesta, para obtener un registro siempre, proba con un
Código:
LEFT JOIN
.
El porque, tiene que ver con el tema de los encuentros internos, externos, derecha, izquierda. Seguro en la red encontraras mucha info y ejemplos.
saludos tor
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Gracias por la respuesta Tor. Lo cierto es que las instrucciones LEFT JOIN o RIGHT JOIN no las he usado nunca; comprendo su filosofía, pero no las he empleado porque en Paradox, que se la base de datos que usaba hasta ahora, no se admitían.

Sin embargo, no acabo de entender como montar un query por ejemplo con LEFT JOIN. A ver si no voy muy descaminado:
Código:
SELECT A.Titulo, A.Disco, A.Orden, A.Anyo, A.Duracion, A.Director, A.Interpretes, A.Estilo, A.Origen, A.Estado, A.Subtitulos, A.Esp, A.Ing, A.Otros
FROM Peliculas A
WHERE A.Registro = 100
LEFT JOIN Imagenes B WHERE A.Registro = B.Registro AND B.Tabla = 'P'

Pero cuando pruebo este query en IBManager me dice esto:
Cita:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 4, column 1.
LEFT.

¿Dónde está el error, que no soy capaz de ver?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

no tengo instalado firebird para asegurte, te lo muestro como te queda en mysql.
Basicamente lo que haces en el primer post es esto
Código:
SELECT * FROM table1,table2 WHERE table1.id=table2.id;

usando en LEFT JOIN deberia quedar asi
Código:
 SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;

Tambien es correcto
Código:
 SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table1.id=10;

Si tenes mas de una tabla
Código:
 SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id;

otra variante
Código:
 SELECT * FROM table1 LEFT JOIN table2 ON table1.ref_table2=table2.id WHERE table1.id=10;

en algunas bd la sintaxis cambia por ejemplo en ms access esto no funcionaria.
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)


Ultima edición por Tor el Mie 12 Nov, 2008 10:36 am, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

para tu ej creo que te quedaria algo asi
Código:
SELECT A.Titulo, A.Disco, A.Orden, A.Anyo, A.Duracion, A.Director, A.Interpretes, A.Estilo, A.Origen, A.Estado, A.Subtitulos, A.Esp, A.Ing, A.Otros
FROM Peliculas AS A
LEFT JOIN Imagenes AS B ON A.Registro = B.Registro AND B.Tabla = 'P' WHERE A.Registro = 100;

si no te funciona deberias investigar sobre la sintaxis del LEFT JOIN en firebird.
saludos tor
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Tor escribió:
para tu ej creo que te quedaria algo asi
Código:
SELECT A.Titulo, A.Disco, A.Orden, A.Anyo, A.Duracion, A.Director, A.Interpretes, A.Estilo, A.Origen, A.Estado, A.Subtitulos, A.Esp, A.Ing, A.Otros
FROM Peliculas AS A
LEFT JOIN Imagenes AS B ON A.Registro = B.Registro AND B.Tabla = 'P' WHERE A.Registro = 100;

si no te funciona deberias investigar sobre la sintaxis del LEFT JOIN en firebird.
saludos tor

Muchas gracias Tor; añadiendo la columna que se me había olvidado (Caratula) es exactamente el código que me hace falta.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.