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

[SOLUCIONADO] Problema con relaciones de tablas

Estas en el tema de Problema con relaciones de tablas en el foro de Mysql en Foros del Web. Hola Amigos, no tengo mucha experiencia en MySql y estoy teniendo problemas, estaba haciendo una consulta con INNER JOIN, no mostraba los resultados que esperaba, ...
  #1 (permalink)  
Antiguo 16/07/2014, 04:47
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
Pregunta Problema con relaciones de tablas

Hola Amigos,

no tengo mucha experiencia en MySql y estoy teniendo problemas,

estaba haciendo una consulta con INNER JOIN, no mostraba los resultados que esperaba, despues lo intenté con LEFT JOIN y tampoco, no se si es que no termino bien de entender como van los JOINS, al final decidi hacerla más sencilla pero sigo sin recibir los resultado deseados, la consulta es la siguiente

Código SQL:
Ver original
  1. SELECT DISTINCT  
  2. per.nombre AS name,
  3. per.apellido AS apelli,
  4. per.telefono_p AS telp,
  5. per.telefono_s AS tels,
  6. per.idpersona
  7. FROM
  8. personas per, profesional_servicio ps, profesional_municipio pm, profesionales pr, usuarios us  
  9. WHERE
  10. per.idpersona = ps.idprofesionalper
  11. AND ps.idservicio = $subact
  12. AND us.idpersona = per.idpersona
  13. AND us.idpermiso = 3  
  14. AND per.idpersona = pm.idprofesionalper
  15. AND pm.idmunicipio = $idmuni
  16. AND pr.saldo < 10
  17. AND pr.invitaciones < 3
  18. AND pr.fechultimotra = '00-00-0000'

El problema es que las 3 ultimas lineas no me las respeta, porque me muestra 2 usuarios, el que yo quiero que muestre y otro mas que coincide con el mismo municipio pero sin embargo tiene saldo 1170 y ademas la fechultimotra no es 00-00-0000

Alguien mas avanzado que yo me puede echar un cable?,

Muchas gracias por adelantado

Última edición por gnzsoloyo; 16/07/2014 a las 05:58
  #2 (permalink)  
Antiguo 16/07/2014, 06:11
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: Problema con relaciones de tablas

En principio, ese que pones no es un LEFT JOIN. Para serlo, en MySQl debes obligatoriamente hacerlo explícito.
En cuanto a usar JOIN implícitos... en MySQL no es una buena idea. Es preferible que uses explícito siempre.
Algo como:
Código SQL:
Ver original
  1. SELECT DISTINCT
  2.                 per.nombre NAME,
  3.                 per.apellido apelli,
  4.                 per.telefono_p telp,
  5.                 per.telefono_s tels,
  6.                 per.idpersona
  7.            FROM personas per
  8.                 INNER JOIN profesional_servicio ps ON per.idpersona = ps.idprofesionalper
  9.                 INNER JOIN profesional_municipio pm ON per.idpersona = pm.idprofesionalper
  10.                 INNER JOIN usuarios us ON us.idpersona = per.idpersona
  11.                 INNER JOIN profesionales pr ON pr.idprofesionalper = pm.idprofesionalper
  12.           WHERE
  13.             AND ps.idservicio = $subact
  14.             AND us.idpermiso = 3
  15.             AND pm.idmunicipio = $idmuni
  16.             AND pr.saldo < 10
  17.             AND pr.invitaciones < 3
  18.             AND pr.fechultimotra = '00-00-0000'

Estoy suponiendo la relación con la tabla "profesionales", porque en realidad no la pusiste. Repetiste una que ya habías puesto, y probablemente por eso te fallara, ya que generaría un producto cartesiano-

En cuanto a esto:
Código SQL:
Ver original
  1. AND pr.fechultimotra = '00-00-0000'

quiero imaginar que no estás usando un campo VARCHAR para guardar una fecha. Eso sería una gran metida de pata... Para eso están los DATE y DATETIME.
__________________
¿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 16/07/2014, 08:22
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Problema con relaciones de tablas

Madre mia que verde estoy¡¡¡, no entiendo lo de implicito y explicito ni lo de producto cartesiano, aqui se demuestra lo poco informado que estoy. Lo siento.

Te comento, este proyecto no es mio, lo cogí asi y y estoy haciendo lo que puedo y con respecto a la fecha... si , es un varchar, yo tambien se desde el primer dia que no deberia ser asi, tampoco se por que lo hizo, solo se que en muchas consultas lo trata con STR_TO_DATE(pt.fecha, '%d-%m-%Y' )=STR_TO_DATE( '$fec', '%d-%m-%Y' ).

Ahora mismo con tu consulta, me dice que no reconoce pr.idpersona

:(

Ya puestos, me puedes recomendar un buen libro para aprender bien ha realizar consultas?, asi este fin de semana lo compro

Gracias de nuevo
  #4 (permalink)  
Antiguo 16/07/2014, 08:27
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Problema con relaciones de tablas

MIL PERDONES,

así si va, es que no había puesto lo de idpersona.

Así funciona.

Ya puestos, me puedes explicar lo de implícito y explicito?, y que diferencia hay en no usar el AS para los alias? o decirme como buscar info.

Gracias
  #5 (permalink)  
Antiguo 16/07/2014, 08:29
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: Problema con relaciones de tablas

Cita:
Ahora mismo con tu consulta, me dice que no reconoce pr.idpersona
Fíjate cuál es el nombre correcto del campo en la tabla "profesionales". Como dije, estoy haciendo una suposición. Obviamente el campo relacional no es ese.
Cita:
Ya puestos, me puedes recomendar un buen libro para aprender bien ha realizar consultas?

Bueno, en realidad el 99% de las preguntas y dudas referentes a uso de queries y funciones propias, se responden en el manual de referencia, como en todos los DBMS.
Los casos especiales, es decir aquellos que surgen de determiados problemas, no se pueden aprender en manual. Sólo se aprenden a resolver por experiencia, trabajando.

Lo que sí debes tener en claro es por lo menos el modelo relacional y la normalizacion de bases de datos. Una base bien diseñada permite consultas claras y eficientes (no necesariamente consultas simples).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 16/07/2014, 08:34
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: Problema con relaciones de tablas

Cita:
Iniciado por Benderzuelo Ver Mensaje
MIL PERDONES,

así si va, es que no había puesto lo de idpersona.

Así funciona.

Ya puestos, me puedes explicar lo de implícito y explicito?, y que diferencia hay en no usar el AS para los alias? o decirme como buscar info.

Gracias
JOIN Implícito es la coma. todos los DBMS lo reconoen como indicación de un JOIN, pero para funcioanr efectivamente los campos relacionados deben obligatoriamente tener exactamente el mismo nombre en ambas tablas.
De lo contrario se producirá un producto cartesiano.

Un JOIN explícito es en el que indicas si es un INNER, LEFT o RIGHT, junto con su cláusula ON. Es decir, que debes indicar qué tablas, y sobre qué campos se hará.
Mezclar explicitos e implícitos es una muy mala idea. Los resultados pueden ser impredeciibles.

Respecto al "AS", se eliminó del estandar ANSI-SQL hace ya varios años, y sólo se conserva por compatibilidad con versiones muy viejas de Bases de DAtos.
En realidad, poner AS sólo ensucia el código, pero no aporta nada. El MySQL (como Oracle, SQL Server y los demás), te reconocerá como alias cualquier cosa que le pongas por detrás del nombre del campo.
__________________
¿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 16/07/2014, 08:45
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Problema con relaciones de tablas

Madre mía, pues el chico que hizo esto en cada tabla llama a la ID de una forma, al menos 3 formas diferentes. Por lo tanto deduzco que voy a tener muchos problemas.

Bueno gnzsoloyo muchas gracias por tu clara explicación y mas aún por la consulta.

le echaré un ojo al manual de referencia.

Saludos

Etiquetas: join
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 05:00.