Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta MYSQL INNER JOIN

Estas en el tema de Consulta MYSQL INNER JOIN en el foro de Mysql en Foros del Web. hOLA AMIGOS ES URGENTE LO QUE NECESITO ESPERO VUESTRA AYUDA POR FAVOR TENGO 3 TABLAS ABONO: codigo fecha importe mes CHEQUE: codigo fecha importe mes ...

  #1 (permalink)  
Antiguo 26/01/2012, 08:50
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Consulta MYSQL INNER JOIN

hOLA AMIGOS ES URGENTE LO QUE NECESITO ESPERO VUESTRA AYUDA
POR FAVOR

TENGO 3 TABLAS

ABONO:
codigo
fecha
importe
mes

CHEQUE:
codigo
fecha
importe
mes

MES:
codigo
nombre

necesito hacer una consulta con esas tablas es urgente
e intentado con el inner join y el left join pero no me dan los datos actuales
  #2 (permalink)  
Antiguo 26/01/2012, 09:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

¿Y cuáles son los campos que relacionan a Abono con Cheque, a Cheque con Mes y a Abono con Mes?
Por lo que se aprecia, no existe una FK en las tablas que relacione una con otra... Y sin eso, sólo podemos adivinar la relación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/01/2012, 11:25
 
Fecha de Ingreso: diciembre-2011
Ubicación: Zacatecas,Mexico
Mensajes: 16
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL INNER JOIN

SELECT ab.*,ch.*,m.* FROM abono AS ab
INNER JOIN cheque AS ch
ON ab.codigo=ch.codigo
INNER JOIN mes AS m
ON ab.codigo=m.codigo;

El orden y los campos que necesites tu ya los especificas, pero mm creo que así debe funcionar..
  #4 (permalink)  
Antiguo 26/01/2012, 11:26
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

no entiendo ?
  #5 (permalink)  
Antiguo 26/01/2012, 11:32
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

miren yo he intentado asi con este codigo
SELECT abono.importe AS 'ABONO', cheque.importe AS 'CHEQUE', mes.nombre AS 'MES' FROM mes
INNER JOIN abono ON mes.codigo = abono.mes
INNER JOIN cheque ON mes.codigo = cheque.mes

y la respuesta me sale asi:


ABONO - CHEQUE - MES
900.00 - 3000.00 - ENERO
100.00 - 3000.00 - ENERO
900.00 - 2000.00 - ENERO
100.00 - 2000.00 - ENERO
900.00 - 100.00 - ENERO
100.00 - 100.00 - ENERO
  #6 (permalink)  
Antiguo 26/01/2012, 11:33
 
Fecha de Ingreso: diciembre-2011
Ubicación: Zacatecas,Mexico
Mensajes: 16
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL INNER JOIN

Que es lo que no entiendes, para tratar de explicar lo mejor posible...

bueno suponiendo que es la consulta que hice jaja te la desgloso,
vamos a suponer, que codigo es tu llave, para hacer los joins
a cada tabla le asignamos un alias para mejor manejo con la palabra reservada
As, el primer From es un asignación directa de que voy a usar esa tabla, después cada inner join hace referencia a las tablas que se van a ir uniendo y en ON especificamos la clausula que se debe cumplir para realizar esa unión
  #7 (permalink)  
Antiguo 26/01/2012, 11:36
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

miren yo he intentado asi con este codigo
SELECT abono.importe AS 'ABONO', cheque.importe AS 'CHEQUE', mes.nombre AS 'MES' FROM mes
INNER JOIN abono ON mes.codigo = abono.mes
INNER JOIN cheque ON mes.codigo = cheque.mes

y la respuesta me sale asi:


ABONO - CHEQUE - MES
900.00 - 3000.00 - ENERO
100.00 - 3000.00 - ENERO
900.00 - 2000.00 - ENERO
100.00 - 2000.00 - ENERO
900.00 - 100.00 - ENERO
100.00 - 100.00 - ENERO

pero no debería mostrarme los campos nulos

ABONO - CHEQUE - MES
900.00 - 3000.00 - ENERO
900.00 - 2000.00 - ENERO
- 100.00 - ENERO

por favor es urgenteeeeeeeeeee o algo estoy haciendo mal ?
  #8 (permalink)  
Antiguo 26/01/2012, 11:41
 
Fecha de Ingreso: diciembre-2011
Ubicación: Zacatecas,Mexico
Mensajes: 16
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL INNER JOIN

Agrégale la clausula WHERE abono.tu_campo!='' AND cheque.tu_campo!='' AND mes.tu_campo!=''
  #9 (permalink)  
Antiguo 26/01/2012, 11:49
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

NO ME FUNCIONA
  #10 (permalink)  
Antiguo 26/01/2012, 12:04
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por psy_iea Ver Mensaje
Agrégale la clausula WHERE abono.tu_campo!='' AND cheque.tu_campo!='' AND mes.tu_campo!=''
no me funciona
  #11 (permalink)  
Antiguo 26/01/2012, 12:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

¿Qué es lo que no te funciona?
¿Te da un error o no te devuelve datos?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 26/01/2012, 13:13
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Qué es lo que no te funciona?
¿Te da un error o no te devuelve datos?
me devuelve vacio
  #13 (permalink)  
Antiguo 26/01/2012, 13:20
 
Fecha de Ingreso: diciembre-2011
Ubicación: Zacatecas,Mexico
Mensajes: 16
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL INNER JOIN

Puedes poner la consulta actual que estas usando, la cual te devuelve vació..., recuerda, que con inner join o join , te regresa valor solo si todas tus condiciones son validas, osease que en tus 3 tablas exista el mismo código(tu campo código), de lo contrario te devuelve vació.
  #14 (permalink)  
Antiguo 26/01/2012, 13:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por neocalichin Ver Mensaje
me devuelve vacio
Eso significa, sencillamente, que no hay registros que cumplan las condiciones que le estás poniendo a la consulta. Ni los INNER JOIN, ni en el WHERE.

Como te dice psy_iea, postea la consulta que tu estás usando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 26/01/2012, 13:25
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por psy_iea Ver Mensaje
Puedes poner la consulta actual que estas usando, la cual te devuelve vació..., recuerda, que con inner join o join , te regresa valor solo si todas tus condiciones son validas, osease que en tus 3 tablas exista el mismo código(tu campo código), de lo contrario te devuelve vació.

he probado con esto

SELECT abono.importe AS 'ABONO', cheque.importe AS 'CHEQUE', mes.nombre AS 'MES' FROM mes
INNER JOIN abono ON mes.codigo = abono.mes
INNER JOIN cheque ON mes.codigo = cheque.mes where abono.importe='' AND cheque.importe='' AND mes.nombre=''

y me sale este comentario MySQL ha devuelto un valor vacío (i.e., cero columnas). (La consulta tardó 0.0008 seg)
  #16 (permalink)  
Antiguo 26/01/2012, 13:30
 
Fecha de Ingreso: diciembre-2011
Ubicación: Zacatecas,Mexico
Mensajes: 16
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL INNER JOIN

Al parecer la consulta es correcta, ahora pon los datos que tienes en las 3 tablas....
  #17 (permalink)  
Antiguo 26/01/2012, 13:30
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso significa, sencillamente, que no hay registros que cumplan las condiciones que le estás poniendo a la consulta. Ni los INNER JOIN, ni en el WHERE.

Como te dice psy_iea, postea la consulta que tu estás usando.
SELECT abono.importe AS 'ABONO', cheque.importe AS 'CHEQUE', mes.nombre AS 'MES' FROM mes
INNER JOIN abono ON mes.codigo = abono.mes
INNER JOIN cheque ON mes.codigo = cheque.mes where abono.importe='' AND cheque.importe='' AND mes.nombre=''
  #18 (permalink)  
Antiguo 26/01/2012, 13:33
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por psy_iea Ver Mensaje
Al parecer la consulta es correcta, ahora pon los datos que tienes en las 3 tablas....
ABONO
codigo fecha mes importe
1 24/01/2012 Enero 900
2 24/01/2012 Enero 100


CHEQUE
codigo fecha mes importe
1 24/01/2012 Enero 3000
2 24/01/2012 Enero 2000
3 25/01/2012 Enero 100

quiero que sea asi:

codigo mes importe importe
1 Enero 3000 900
2 Enero 2000 100
3 Enero 100
  #19 (permalink)  
Antiguo 26/01/2012, 13:35
 
Fecha de Ingreso: diciembre-2011
Ubicación: Zacatecas,Mexico
Mensajes: 16
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Consulta MYSQL INNER JOIN

ya me fije, esta mal tu where , como lo tienes le dices que te mande los campos vacíos,
tienes que ponerlo así:

where abono.importe!='' AND cheque.importe!='' AND mes.nombre!=''

Tiene que ser diferente de vació
  #20 (permalink)  
Antiguo 26/01/2012, 13:43
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por psy_iea Ver Mensaje
ya me fije, esta mal tu where , como lo tienes le dices que te mande los campos vacíos,
tienes que ponerlo así:

where abono.importe!='' AND cheque.importe!='' AND mes.nombre!=''

Tiene que ser diferente de vació

ya ok me salio pero no la consulta que yo quiero


SELECT abono.importe AS 'ABONO', cheque.importe AS 'CHEQUE', mes.nombre AS 'MES'
FROM mes
INNER JOIN abono ON mes.codigo = abono.mes
INNER JOIN cheque ON mes.codigo = cheque.mes
WHERE abono.importe != ''
AND cheque.importe != ''
AND mes.nombre != ''

me sale asi

ABONO CHEQUE MES
900.00 3000.00 ENERO
100.00 3000.00 ENERO
900.00 2000.00 ENERO
100.00 2000.00 ENERO
900.00 100.00 ENERO
100.00 100.00 ENERO

y deberia salir asi


ABONO CHEQUE MES
900.00 3000.00 ENERO

100.00 2000.00 ENERO
0 100.00 ENERO
  #21 (permalink)  
Antiguo 26/01/2012, 18:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

Hay algo absurdo en tu planteo: Si "Mes" contiene "ENERO", y código es un numérico autoincremental, como parece, son tipos de dato incompatibles. Entonces, ¿qué sentido tiene esta condición?:
Código MySQL:
Ver original
  1. mes.codigo = abono.mes
o esta:
Código Python:
Ver original
  1. mes.codigo = cheque.mes
Según planteas tus datos debería existir una FOREIGN KEY de Abono en la tabla Cheque para determinar a qué Abono corresponde el pago realizado con un Cheque determinado.
Y eso no existe en tu descripción de tablas.
Por otro lado, no se entiende cuál es el sentido de poner una tabla "Mes". ¿Tener los nombres de los meses? ¿Para qué? Eso se peude obtener programáticamente y sin tantas complicaciones.
Además para que eso tuviese algún sentido, la PK de esa tabla "Meses" debería estar como FK en "Abono"... Cosa que tampoco ocurre.

Sin esas relaciones puestas entre PK y FK, la consulta que pides no se puede lograr de una forma coherente.

Tengo la impresión de que no has leido ni un tutorial del tema de BB.DD.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/01/2012 a las 19:57
  #22 (permalink)  
Antiguo 27/01/2012, 08:21
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Hay algo absurdo en tu planteo: Si "Mes" contiene "ENERO", y código es un numérico autoincremental, como parece, son tipos de dato incompatibles. Entonces, ¿qué sentido tiene esta condición?:
Código MySQL:
Ver original
  1. mes.codigo = abono.mes
o esta:
Código Python:
Ver original
  1. mes.codigo = cheque.mes
Según planteas tus datos debería existir una FOREIGN KEY de Abono en la tabla Cheque para determinar a qué Abono corresponde el pago realizado con un Cheque determinado.
Y eso no existe en tu descripción de tablas.
Por otro lado, no se entiende cuál es el sentido de poner una tabla "Mes". ¿Tener los nombres de los meses? ¿Para qué? Eso se peude obtener programáticamente y sin tantas complicaciones.
Además para que eso tuviese algún sentido, la PK de esa tabla "Meses" debería estar como FK en "Abono"... Cosa que tampoco ocurre.

Sin esas relaciones puestas entre PK y FK, la consulta que pides no se puede lograr de una forma coherente.

Tengo la impresión de que no has leido ni un tutorial del tema de BB.DD.

bueno soy novato en esto porfa :???

ENTONCES QUITO LA TABLA MES ? Y SOLO ME QUEDARIA ABONO Y CHEQUE PERO ESAS DOS TABLAS NO TIENEN RELACIONES ?
  #23 (permalink)  
Antiguo 27/01/2012, 08:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

Las tablas, tal y como las estás poniendo, no parecen estar relacionadas.
¿Podrías aclarar cuál es la verdadera estructura y cómo se relacionan los datos entre ambas?
AL menos explicalo para ver lo que te falta...
La cosa no pasa tanto por poner o sacar tablas, en este momento. Es que no conoces nada de diseño de bases de datos. Necesitas leer del modelo relacional y de fundamentos de las bases de datos relacionales.
Pareciera que te estás metiendo en camisa de 11 varas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 27/01/2012, 08:37
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Las tablas, tal y como las estás poniendo, no parecen estar relacionadas.
¿Podrías aclarar cuál es la verdadera estructura y cómo se relacionan los datos entre ambas?
AL menos explicalo para ver lo que te falta...
La cosa no pasa tanto por poner o sacar tablas, en este momento. Es que no conoces nada de diseño de bases de datos. Necesitas leer del modelo relacional y de fundamentos de las bases de datos relacionales.
Pareciera que te estás metiendo en camisa de 11 varas.
JAJJAJA SI HERMANO ME FALTA PERO QUIERO APRENDER DISCULPAME SI TE ESTOY INCOMODANDO PERO COMO DICE EL CHAVO DEL 8 FUE SIN QUERER QUERIENDO

explico:

tengo esta imagen http://www.online-imagenes.com/show-image.php?id=898778e16d6864aea1b7f9fdc58c152e

y esta

http://www.online-imagenes.com/show-image.php?id=7f9b0cdc2c1e3590626913c0ca59ebe2

y quiero hacer la consulta asi


CODIGO MES CHEQUE ABONO
1 Enero 3000 900
2 Enero 2000 100
3 Enero 100
  #25 (permalink)  
Antiguo 27/01/2012, 10:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

De las imágenes surgen algunas dudas:
1) Qué es lo que representa "Abono"? ¿Es un cntrato de prestación mensual de un servicio o indica que se depositó un monto de dinero en Caja?
2) ¿Por qué pones el importe como VARCHAR? Debería ser DECIMAL o como mínimo FLOAT (este no muy aconsejable).
3) ¿Qué representa "cargos" en Cheque?

Básicamente, para que quede claro, si abono representa los depósitos en caja, hacen falta más tablas para indicar a qué corresponden los mismos, a menos que sólo se puedan depositar cheques.
Pero si Abono es un contrato de servicios mensual, entonces lo que falta es la tabla Pagos, donde se relacione el contrato, la cuota y el modo de pago.
Como puedes ver, antes de responder la consulta, hay que definir qué cosa representa y qué tablas se necesitan para eso.
Hasta ahora, no se puede elaborar algo que devuelva esto:
Cita:
CODIGO MES CHEQUE ABONO
1 Enero 3000 900
2 Enero 2000 100
3 Enero 100
Porque no se puede definir qué relaciona al Cheque con el Abono, por l que no se puede hacer que el 3000 salga en el mismo registro del 900.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 27/01/2012, 10:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

Mira, te voy a dar un detalle importante.
Para que la consulta que quieres hacer de el resultado esperado, lo que debes hacer es:
Código MySQL:
Ver original
  1.     A.codigo,
  2.     A.mes,
  3.     A.importe ABONO,
  4.     C.importe CHEQUE
  5. FROM abono A LEFT JOIN cheque C ON A.codigo = C.codigo
  6. WHERE TRUE OR C.importe IS NULL;
Pero este es un resultado dibujado. No es un resultado real surgido de las relaciones entre las tablas, o siquiera que sea consistente, porque no podemos, de acuerdo a tu modelo, asegurar que efectivamente el código de cada abono coincida con el código de cada cheque. Con sólo que un INSERT fallase alguna vez en alguna de las dos tablas, la relación inidcada no existiría, porque los números no coincidirían.
El problema es que no hay nada en tus tablas que nos diga exactamente cuál registro de Abono se relaciona con cuál de Cheque... Y eso es lo que trato de que solucionemos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #27 (permalink)  
Antiguo 27/01/2012, 10:57
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Mensaje Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Mira, te voy a dar un detalle importante.
Para que la consulta que quieres hacer de el resultado esperado, lo que debes hacer es:
Código MySQL:
Ver original
  1.     A.codigo,
  2.     A.mes,
  3.     A.importe ABONO,
  4.     C.importe CHEQUE
  5. FROM abono A LEFT JOIN cheque C ON A.codigo = C.codigo
  6. WHERE TRUE OR C.importe IS NULL;
Pero este es un resultado dibujado. No es un resultado real surgido de las relaciones entre las tablas, o siquiera que sea consistente, porque no podemos, de acuerdo a tu modelo, asegurar que efectivamente el código de cada abono coincida con el código de cada cheque. Con sólo que un INSERT fallase alguna vez en alguna de las dos tablas, la relación inidcada no existiría, porque los números no coincidirían.
El problema es que no hay nada en tus tablas que nos diga exactamente cuál registro de Abono se relaciona con cuál de Cheque... Y eso es lo que trato de que solucionemos.
CHEQUE son los ingresos que hay en una empresa osea que otras empresas giran por trabajos realizados.

ABONO son los pagos a terceros ejemplo pago a cualquier persona por servicios

en si esas dos tablas son las pilares por ejemplo

si la tabla cheque tiene un ingreso "IMPORTE" de 5000.00
y la empresa realizo un abono de 1000.00

se debería hacer una resta cheque - abono = saldo contable

y bueno como esas dos tablas cheque, y abono no estaban relacionadas
bueno trate de relacionarlas con una tabla llamada mes pero creo q estoy mas perdido.

por favor ayudame
  #28 (permalink)  
Antiguo 27/01/2012, 11:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

Cita:
CHEQUE son los ingresos que hay en una empresa osea que otras empresas giran por trabajos realizados.
ABONO son los pagos a terceros ejemplo pago a cualquier persona por servicios
Esencialmente estás intentando hacer un balance de caja...
El tema en ese caso pasa porque no existe en realidad una relación entre ambos porque se trata de operaciones completamente independientes. Son entidades diferentes.
Acá, para resolverlo deberías crear en lugar de esa entidad "Mes" una entidad que llames, por ejemplo, "MovimientoCaja", y relaciones Cheque ("Caja_Cheque") y Abono ("Caja_Egreso") con ella, de modo que hereden la clave (relación 1:N en una jerarquia).
De ese modo tendrías todos los movimientos de caja registrados en una tabla, y los tipos de movimiento en cada una de las otras (a la que se pueden ir agregando otras según el tipo de entrada o egreso que se trate).
En ese contexto, si quieres el listado completo sería:
Código MySQL:
Ver original
  1.     MC.movimiento_id,
  2.     MC.fecha,
  3.     IFNULL(CE.importe, 0.0) Egreso,
  4.     IFNULL(CC.importe, 0.0) Ingreso
  5.     movimiento_caja MC
  6.     LEFT JOIN CajaEgreso CE ON MC.movimiento_id = CE.movimiento_id
  7.     LEFT JOIN CajaCheque CC ON MC.movimiento_id = CC.movimiento_id
  8.     MC.movimiento_id

Si quieres además una sumatoria con subtotales:
Código MySQL:
Ver original
  1.     MC.movimiento_id,
  2.     MC.fecha,
  3.     IFNULL(CE.importe, 0.0) Egreso,
  4.     IFNULL(CC.importe, 0.0) Ingreso,
  5.     SUM(CE.importe) TotalEgreso,
  6.     SUM(CC.importe) TotalIngreso
  7.     movimiento_caja MC
  8.     LEFT JOIN CajaEgreso CE ON MC.movimiento_id = CE.movimiento_id
  9.     LEFT JOIN CajaCheque CC ON MC.movimiento_id = CC.movimiento_id
  10.     MC.movimiento_id,
  11.     MC.fecha,
  12.     CE.importe Egreso,
  13.     CC.importe Ingreso  WITH ROLLUP;

No te olvides que para que este esquema funcione las tablas CajaCheque y CajaEgreso que te indico no deben tener clave propia, sino que heredan la clave de MovimientoCaja.
Si no entiendes bien esta idea te sugiero empezar leyendo algo de fundamentos del modelo Entidad - Relación y su aplicación a las bases de datos, cosa que puedes encontrar en Wikipedia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #29 (permalink)  
Antiguo 27/01/2012, 12:02
 
Fecha de Ingreso: enero-2012
Mensajes: 158
Antigüedad: 12 años, 3 meses
Puntos: 1
Mensaje Respuesta: Consulta MYSQL INNER JOIN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Esencialmente estás intentando hacer un balance de caja...
El tema en ese caso pasa porque no existe en realidad una relación entre ambos porque se trata de operaciones completamente independientes. Son entidades diferentes.
Acá, para resolverlo deberías crear en lugar de esa entidad "Mes" una entidad que llames, por ejemplo, "MovimientoCaja", y relaciones Cheque ("Caja_Cheque") y Abono ("Caja_Egreso") con ella, de modo que hereden la clave (relación 1:N en una jerarquia).
De ese modo tendrías todos los movimientos de caja registrados en una tabla, y los tipos de movimiento en cada una de las otras (a la que se pueden ir agregando otras según el tipo de entrada o egreso que se trate).
En ese contexto, si quieres el listado completo sería:
Código MySQL:
Ver original
  1.     MC.movimiento_id,
  2.     MC.fecha,
  3.     IFNULL(CE.importe, 0.0) Egreso,
  4.     IFNULL(CC.importe, 0.0) Ingreso
  5.     movimiento_caja MC
  6.     LEFT JOIN CajaEgreso CE ON MC.movimiento_id = CE.movimiento_id
  7.     LEFT JOIN CajaCheque CC ON MC.movimiento_id = CC.movimiento_id
  8.     MC.movimiento_id

Si quieres además una sumatoria con subtotales:
Código MySQL:
Ver original
  1.     MC.movimiento_id,
  2.     MC.fecha,
  3.     IFNULL(CE.importe, 0.0) Egreso,
  4.     IFNULL(CC.importe, 0.0) Ingreso,
  5.     SUM(CE.importe) TotalEgreso,
  6.     SUM(CC.importe) TotalIngreso
  7.     movimiento_caja MC
  8.     LEFT JOIN CajaEgreso CE ON MC.movimiento_id = CE.movimiento_id
  9.     LEFT JOIN CajaCheque CC ON MC.movimiento_id = CC.movimiento_id
  10.     MC.movimiento_id,
  11.     MC.fecha,
  12.     CE.importe Egreso,
  13.     CC.importe Ingreso  WITH ROLLUP;

No te olvides que para que este esquema funcione las tablas CajaCheque y CajaEgreso que te indico no deben tener clave propia, sino que heredan la clave de MovimientoCaja.
Si no entiendes bien esta idea te sugiero empezar leyendo algo de fundamentos del modelo Entidad - Relación y su aplicación a las bases de datos, cosa que puedes [URL="http://es.wikipedia.org/wiki/Bases_de_datos_relacionales"]encontrar en Wikipedia[/URL].
ESTUBE REVISANDO OTROS FOROS Y LO ENTENDI ASI
ESTA BIEN http://www.online-imagenes.com/show-image.php?id=f34648eb07bbc30d40d80905db933495


ASI SERIA LA DB PARA PODER PROSEGUIR O NO ? Y ESTA BIEN EL PRIMARY O UNA CLAVE FORANEA ?

SALUDOS
  #30 (permalink)  
Antiguo 27/01/2012, 12:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta MYSQL INNER JOIN

No. Exactamente al revés:
MovimientoCaja(movimiento_id, fecha_hora)
CajaCheque(movimiento_id, importe, banco_id, fecharecepcion, fechadeposito, fechaimputacion, ...)
CajaEgreso(movimietno_id, importe, concepto_id, fechasalida, mediopago_id, ....)
La relación es:
CajaCheque->MovimientoCaja
CajaCheque->MovimientoCaja

¿Se entiende?

No puedo graficártelo porque estoy en horas de trabajo.

En CajaEgreso y CajaCheque, el campo movimietno_id es al mismo tiempo PK y FK.

Te insisto en que tienes que leer y estudiar el tema de las bases de datos relacionales. No es sencillo, pero es hipernecesario.

Bases de Datos Relacionales en Wikipedia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: join, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:11.