SQL - Problema con combinacion de tablas

 
Vista:

Problema con combinacion de tablas

Publicado por Diego (3 intervenciones) el 27/04/2010 04:26:03
Amigos necesito ayuda por favor.
Tengo 3 tablas:

movimientosbancarios, detdepbanco y chequeslibrados.
la tabla movimientos bancarios tiene un campo movimientosbancarios_id, el cual es el que se relaciona con detdepbanco.movimientosbancarios_id y con chequeslibrados.movimientosbancarios_id.

Ahora bien, necesito obtener todos los registros de movmientosbancarios, y que me traiga tambien los campos de las tablas detdepbanco y chequeslibrados, de acuerdo a la relacion que tienen con el campo id (movimientosbancarios_id).

Espero haber sido claro y espero puedan hecharme una mano.
Ya intente con INNER JOIN pero no he podido y no entiendo con que lograr esto.

lo que hice fue:
SELECT * FROM movimientosbancarios INNER JOIN (chequeslibrados INNER JOIN ( detdepbanco) ON detdepbanco.movimientosbancarios_id=movimientosbancarios.movimientosbancarios_id) ON movimientosbancarios.movimientosbancarios_id =chequeslibrados.movimientosbancarios_id

Pero me da error

Gracias todos.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Problema con combinacion de tablas

Publicado por Leonardo Josue (1173 intervenciones) el 28/04/2010 16:25:41
Dependiendo del Manejador de bd que estás utilizando puede ser que necesites o nó agrupar los INNER JOIN:

SELECT * FROM movimientosbancarios m
INNER JOIN chequeslibrados c ON c.movimientosbancarios_id = m.movimientosbancarios_id
INNER JOIN detdepbanco d ON d.movimientosbancarios_id = m.movimientosbancarios_id

SELECT * FROM
(movimientosbancarios m INNER JOIN chequeslibrados c ON c.movimientosbancarios_id = m.movimientosbancarios_id)
INNER JOIN detdepbanco d ON d.movimientosbancarios_id = m.movimientosbancarios_id

Intenta con alguna de estas dos formas, y si te sigue marcando error sería conveniente que pusieras en tu comentario qué error es exactamente el que te aparece para poder ayudarte mejor.

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

RE:Problema con combinacion de tablas

Publicado por Diego (3 intervenciones) el 28/04/2010 20:30:14
Leo, muchas gracias por tu respuesta, y debo decir que la consulta no me da error pero me devuelve vacia la consulta.
No entiendo porque no me devuelve datos si verifico y si hay datos. Tengo movimientosbancarios, tengo un registro en la tabla chequeslibrados y tengo varios registros en la tabla detdepbanco, asi que no entiendo.
Vere como lo soluciono, de todas maneras Agradezco otra vez.

Saludos,
Diego
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Problema con combinacion de tablas

Publicado por Leonardo Josue (1173 intervenciones) el 28/04/2010 21:20:04
Hola de nuevo Diego... me parece bastante raro lo que comentas, ya que si los datos existen, pues debería arrojar resultados, mira, no sé que tipo de datos sean tus campos, si son varchar es posible que en alguno de ellos aparezcan espacios en blanco.

Te recomiendo que pruebes primeramente hacer el join con dos tablas, para ver si te arrojan resultados, creo que sería más facil encontrar donde está el error:

--> movimientosbancarios contra chequesliberados:
SELECT * FROM movimientosbancarios m
INNER JOIN chequeslibrados c ON c.movimientosbancarios_id = m.movimientosbancarios_id

--> movimientos bancarios contra detdepbanco
SELECT * FROM movimientosbancarios m
INNER JOIN detdepbanco d ON d.movimientosbancarios_id = m.movimientosbancarios_id

-->chequesliberados contra detdepbanco
SELECT * FROM chequeslibrados c
INNER JOIN detdepbanco d ON d.movimientosbancarios_id = c.movimientosbancarios_id

También puedes verificar con los siguientes querys si las llaves que tienes en la tablas chequesliberados y detdepbanco existen en la tabla de movimientosbancarios:

select * from chequesliberados where movimientosbancarios_id in (select movimientosbancarios_id from movimientosbancarios)

select * from detdepbanco where movimientosbancarios_id in (select movimientosbancarios_id from movimientosbancarios)

Saludos y espero que resuelvas pronto tu problema.
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

RE:Problema con combinacion de tablas

Publicado por Diego (3 intervenciones) el 29/04/2010 00:51:05
Leo, gracias otra vez.
Te cuento, las consultas dos primeras si funcionan. lo que obviamente no va a funcionar es la consulta de cheques librados contra detdepbanco, porque las referencias son contra el campo movimientosbancarios_id, es tipo int autoincremental.
Y el tema es que en movimientos bancarios tengo todos los registros, los de chequeslibrados y los de detdepbanco, me explico?
o sea si libero un cheque queda registro en chequeslibrados y otro registro en movimientosbancarios y se relacionan por el campo movimientosbancarios_id en ambas tablas.
Y si tengo un registro en detdepbanco, tambien grabo el registro en movimientosbancarios y los relaciono tambien con la misma clave movimientosbancarios_id.
Quiza sea yo el que quiere una consulta imposible, jeje. no se, mi idea es poder tener los datos de todos los campos, de los cheques librados y de los detdepbanco.
Quiza esto es un entrevero, discuplas.
Saludos y gracias.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Problema con combinacion de tablas

Publicado por Leonardo Josue (1173 intervenciones) el 29/04/2010 16:41:49
Hola Diego:

Creo que faltó que te explicaras un poco más. Al no existir relación entra las tablas chequesliberados y detdepbanco entonces no puedes hacer el INNER JOIN y por eso siempre de regresa una consulta vacía.

Según lo que comentas creo que lo que en realidad necesitas es hacer un FULL OUTER JOIN, vamos a ver si más o menos entendí que es lo que tienes en tus tablas y qué quieres de salida:

Supongamos que en tu tabla movimientosbancarios tienes los siguientes registros:

movimientosbancarios_id|campo_1
1|mov1
2|mov2
3|mov3
4|mov4

Supongamos también que los movimientos 1 y 3 corresponden a la vez a cheques liberados, por lo tabto la tabla chequeslibrados debería tener una estructira más o menos así:

chequeliberado_id|movimientosbancarios_id|campo_2
1|1|cheque1
2|3|cheque3

Ahora bien, los movimientos bancarios 2 y 4 por lo tanto debería estar en la tabla detdepbanco, que estaría mas o menos así:

detdepbanco_id|movimientosbancarios_id|campo_3
1|2|det2
2|4|det4

Para poder unir las tres tablas deberías hacer algo como esto:

select * from movimientosbancarios m
full outer join chequeslibrados c on c.movimientosbancarios_id = m.movimientosbancarios_id
full outer join dbo.zzz_jaco_detdepbanco d on d.movimientosbancarios_id = m.movimientosbancarios_id

y tu tabla resultado sería algo como esto:

movimientosbancarios_id|campo_1|chequeliberado_id|movimientosbancarios_id|campo_2|detdepbanco_id|movimientosbancarios_id|campo_3
1|mov1|1|1|cheque1|NULL|NULL|NULL
2|mov2|NULL|NULL|NULL|1|2|det2
3|mov3|2|3|cheque3|NULL|NULL|NULL
4|mov5|NULL|NULL|NULL|2|4|det4

Saludos y espero que ahora si esto sea lo que necesitas.
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