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

[SOLUCIONADO] Usar inner join ?

Estas en el tema de Usar inner join ? en el foro de Mysql en Foros del Web. Hola gente buenas tardes, he estado por horas tratando de lograr una consulta y no he obtenido ninguna solucion eficiente Estoy utilizando una consulta con ...
  #1 (permalink)  
Antiguo 06/07/2014, 14:50
 
Fecha de Ingreso: diciembre-2012
Mensajes: 53
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Usar inner join ?

Hola gente buenas tardes, he estado por horas tratando de lograr una consulta y no he obtenido ninguna solucion eficiente
Estoy utilizando una consulta con varios inner join para traer los datos que coinciden en las tablas
la consulta es la siguiente:


Código MySQL:
Ver original
  1. SELECT * FROM inscripcion AS i INNER JOIN alumno AS alu ON(i.codigo_alumno=alu.codigo_alumno )
  2.  INNER JOIN pago AS pag ON(pag.codigo_inscripcion=i.codigo_inscripcion);
esta consulta funciona perfecto me trae los datos que coinciden en las 3 tablas.


lo que yo quiero hacer es que, NO MOSTRAR las inscripciones si es que ya fueron pagadas, me explico?

osea si en la tabla pago , exisite el id inscripcion 1. no mostrar los datos cuando consulte las inscripciones por el mero hecho de que ya fue pagada.
se entiende?

Saludos y muchas gracias.
  #2 (permalink)  
Antiguo 06/07/2014, 14:58
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, 4 meses
Puntos: 2658
Respuesta: Usar inner join ?

LEFT JOIN sobre la tabla de pagos, y buscar los idea de esa tabla que vuelvan nulos.
__________________
¿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 06/07/2014, 16:49
 
Fecha de Ingreso: diciembre-2012
Mensajes: 53
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Usar inner join ?

Hola gnzsoloyo muchas gracias me ha salido me quedo asi la linea :

Código MySQL:
Ver original
  1. LEFT JOIN pago AS pag ON(pag.codigo_inscripcion=i.codigo_inscripcion  ) WHERE pag.codigo_inscripcion IS NULL"

Lo que me he dado cuenta que las inscripciones que han sido pagadas desaparecen ya sea si abono todo el pago completo o si debe.
Me gustaria añadir un if a la consulta pero no se como hacerlo, para que muestre solo los null si el campo debe=0

la logica seria algo asii:

Código MySQL:
Ver original
  1. if (pag.debe=0){
  2.  WHERE pag.codigo_inscripcion IS NULL"
  3. }else{
  4. /// si el pago no es igual a 0, es decir DEBE dinero, seguir mostrando normalmente
  5. }

no me sale plantearla como una consulta.

Muchas gracias por tu ayuda amigo.
  #4 (permalink)  
Antiguo 06/07/2014, 18:17
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, 4 meses
Puntos: 2658
Respuesta: Usar inner join ?

Con condiciones como las que planteas la consulta se vuelve bastante más compleja, porque requiere de subconsultas que determinen los importes sumados y el importe total, para poner las condiciones del WHERE.
En cualquier caso, para hacerte una sugerencia, necesitaríamos ver la estructura de las tablas más concretamente, así como algunos datos de ejemplo.
Lo que quieres es algo más fino que un simple "existe o no existe".

¿Podrías postear la estructura de las tablas, al menos? Así sabríamos de donde sacar los datos a evaluar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/07/2014, 18:41
 
Fecha de Ingreso: diciembre-2012
Mensajes: 53
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Usar inner join ?

Gracias gnzsoloyo uso las siguientes tablas

tabla inscripcion:
codigo_inscripcion
codigo_alumno
fecha
senia

tabla pago:
codigo_pago
codigo_inscripcion
codigo_alumno
abona
debe
fecha

tabla alumno:
codigo_alumno
nombre
apellido
dni
facebook
  #6 (permalink)  
Antiguo 06/07/2014, 19:52
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, 4 meses
Puntos: 2658
Respuesta: Usar inner join ?

Bueno, ahora se ve un poco más claramente.
Más allá de que el diseño de las tablas no está normalizado, y que hay algunos defectos conceptuales, vamos a basarnos en ese esquema (luego podemos ver por qué te digo eso, si quieres).
Podriamos probarlo así:
Código MySQL:
Ver original
  1. FROM inscripcion i
  2.     INNER JOIN alumno alu ON i.codigo_alumno=alu.codigo_alumno
  3.     LEFT JOIN pago pag ON pag.codigo_inscripcion=i.codigo_inscripcion
  4.     pag.codigo_inscripcion IS NULL
  5.     OR
  6.    pag.codigo_alumno NOT IN (SELECT p.codigo_alumno FROM pago p WHERE p.debe = 0)
  7. ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 06/07/2014, 20:15
 
Fecha de Ingreso: diciembre-2012
Mensajes: 53
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Usar inner join ?

muchas gracias gnzsoloyo ha funcionado a la perfeccion!!!

si quizas a las tablas les falta mejorar los aspectos que mencionas y me encantaria escuchar tus sugerencias.

Te agradezco enormemente me has dado una mano enorme!

Etiquetas: join, select, tabla, usar
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 13:11.