 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 03 Nov, 2008 12:25 pm Asunto: Respuesta incorrecta en Firebird |
|
|
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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Lun 03 Nov, 2008 10:26 pm Asunto: |
|
|
Creo que no es un error de Firebird, asi debe ser la respuesta, para obtener un registro siempre, proba con un .
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 04 Nov, 2008 9:09 am Asunto: |
|
|
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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Mar 04 Nov, 2008 10:40 am Asunto: |
|
|
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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Mar 04 Nov, 2008 10:54 am Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 04 Nov, 2008 11:48 am Asunto: |
|
|
| 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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|