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

Consulta SQL 3 tablas implicadas

Estas en el tema de Consulta SQL 3 tablas implicadas en el foro de Bases de Datos General en Foros del Web. Buenas detallo el contenido de las 3 tablas: DAT_EMPRESAS: IdEmpre, NomEmpre, CIF, IdUsu PRE_LOPDE: IdPresu, IdEmpre, FecPresu, FecEntCont USUARIOS: IdUsu, TipUsu, NIF - Necesito una ...
  #1 (permalink)  
Antiguo 25/05/2011, 05:25
 
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Consulta SQL 3 tablas implicadas

Buenas detallo el contenido de las 3 tablas:

DAT_EMPRESAS: IdEmpre, NomEmpre, CIF, IdUsu

PRE_LOPDE: IdPresu, IdEmpre, FecPresu, FecEntCont

USUARIOS: IdUsu, TipUsu, NIF


- Necesito una consulta que me devuelve todos los usuarios que tengan tipusu = 2 y además los que Su idUSU aparezca en el de DAT_EMPRESAS aparezca con la máxima FecPresu de PRE_LOPDE relacionando su IdEmpre, ya que existirán para muchos varios IdEmpre el mismo IdUsu en DAT_EMPRESAS.

Yo me he quedado en la siguiente consulta pero me da error en MAX...

SELECT us.`NifDniUsu`, us.`NomUsu`,MAX (pre.FecPresu)
FROM `M_tb_usuarios` us, M_tb_dat_empresas em, M_tb_pre_lopde pre
WHERE us.`IdUsu` = em.IdUsu AND em.IdEmpre = pre.IdEmpre AND us.TipUsu = 2
GROUP BY us.`NifDniUsu`, us.`NomUsu`;

--Estoy usando PHPMyAdmin

Gracias de antemano. Un saludo.
  #2 (permalink)  
Antiguo 25/05/2011, 05:30
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Consulta SQL 3 tablas implicadas

Tienes que hacer un INNER JOIN, mejor que unir las tablas sin más. A parte, en el WHERE te falta las condiciones de unión de las tablas. Posiblemente te falle por esto último
  #3 (permalink)  
Antiguo 25/05/2011, 08:25
 
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta SQL 3 tablas implicadas

Es que me dice 'FUNCTION INFO_GLOBAL.MAX does not exist'....

¿Como pondrias tu el INNER JOIN y las ondiciones de unión?

Gracias!
  #4 (permalink)  
Antiguo 25/05/2011, 08:30
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Consulta SQL 3 tablas implicadas

La sintaxis del INNER JOIN es la siguiente

Código SQL:
Ver original
  1. SELECT *
  2. FROM tabla1 t1
  3. INNER JOIN tabla2 t2 ON
  4. t1.id = t2.id_t1
  5. INNER JOIN tabla3 t3 ON
  6. t1.id = t3.id_t1
  7. WHERE ...
  #5 (permalink)  
Antiguo 25/05/2011, 08:50
 
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta SQL 3 tablas implicadas

He realizado la siguiente consulta:

SELECT us.`NifDniUsu` , us.`NomUsu`
FROM `M_tb_usuarios` us
INNER JOIN M_tb_dat_empresas em ON us.idUsu = em.idUsu
INNER JOIN M_tb_pre_lopde pre ON em.idEmpre = pre.idEmpre
WHERE us.TipUsu =2
GROUP BY us.`NifDniUsu` , us.`NomUsu`

--Tengo 2 problemas:

- No me aparece la fecha máxima de presupuesto de cada empresa
- Los usuarios de tipo 2 que no tienen ninguna empresa asignada (idUsu en dat_empresas) no me aparecen.

¿Como puedo solucionar esto?
  #6 (permalink)  
Antiguo 25/05/2011, 08:58
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Consulta SQL 3 tablas implicadas

Código SQL:
Ver original
  1. SELECT us.`NifDniUsu` , us.`NomUsu`, MAX (pre.Fec_presu)
  2. FROM `M_tb_usuarios` us
  3. INNER JOIN M_tb_dat_empresas em ON us.idUsu = em.idUsu
  4. LEFT JOIN M_tb_pre_lopde pre ON em.idEmpre = pre.idEmpre
  5. WHERE us.TipUsu =2
  6. GROUP BY us.`NifDniUsu` , us.`NomUsu`
  #7 (permalink)  
Antiguo 25/05/2011, 09:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta SQL 3 tablas implicadas

Me sigue dando el siguiente error:

'#1630 - FUNCTION INFO_GLOBAL.MAX does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual'
  #8 (permalink)  
Antiguo 25/05/2011, 10:24
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 SQL 3 tablas implicadas

Estás dejando un espacio vacío entre el MAX y el paréntesis y MySQL no admite eso.
Código MySQL:
Ver original
  1.     us.`NifDniUsu` ,
  2.     us.`NomUsu`,
  3.     MAX(pre.Fec_presu)
  4.     `M_tb_usuarios` us
  5.     INNER JOIN
  6.     M_tb_dat_empresas em ON us.idUsu = em.idUsu
  7.     LEFT JOIN
  8.     M_tb_pre_lopde pre ON em.idEmpre = pre.idEmpre
  9.     us.TipUsu =2
  10.     us.`NifDniUsu` , us.`NomUsu`
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 25/05/2011, 11:05
 
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta SQL 3 tablas implicadas

Exactamente, era el espacio....

Pero sigo teniendo el problema que comentaba anteriormente:

- Los usuarios de tipo 2 que no tienen ninguna empresa asignada (idUsu en dat_empresas) no me aparecen.

Quiero que me aparezcan con el campo de fecha vacio para los que no cumplan esa condición.

¿Qué tendría que añadir?
  #10 (permalink)  
Antiguo 25/05/2011, 11:19
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 SQL 3 tablas implicadas

Cuando tienes una relación condicional como esa no puedes usar INNER, debes usar o LEFT o RIGHT.
La cláusula INNER JOIN sólo devuelve si existen coincidencias entre ambas tablas. El hecho de que estés usando LEFT en la siguiente relación es irrelevante, porque para cuando se evalúa esa tabla, la relación de las anteriores ya se realizó y se descartaron los no coincidentes.
Sería mas o menos así:
Código MySQL:
Ver original
  1.     us.`NifDniUsu` ,
  2.     us.`NomUsu`,
  3.     IFNULL(MAX(pre.Fec_presu), '') Fec_presu
  4.     (SELECT * FROM `M_tb_usuarios` WHERE TipUsu =2 ) us
  5.     LEFT JOIN
  6.     M_tb_dat_empresas em ON us.idUsu = em.idUsu
  7.     LEFT JOIN
  8.     M_tb_pre_lopde pre ON em.idEmpre = pre.idEmpre
  9.     TRUE OR em.idUsu IS NULL
  10.     us.`NifDniUsu` , us.`NomUsu`
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 26/05/2011, 05:20
 
Fecha de Ingreso: mayo-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta SQL 3 tablas implicadas

Muchas gracias gnzsoloyo!!!

Me han ayudado mucho tus respuestas y he podido resolver mi problema.

Gracias y un saludo.

Etiquetas: sql, bases-de-datos
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 17:19.