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

No puedo hacer 2 JOIN con la misma tabla!

Estas en el tema de No puedo hacer 2 JOIN con la misma tabla! en el foro de Bases de Datos General en Foros del Web. Hola buenos días para todos en ForosDelWeb, me presento soy QuetzalMeneghetti y admiro este gran foro que más de una vez me ha ayudado con ...
  #1 (permalink)  
Antiguo 30/01/2015, 16:56
 
Fecha de Ingreso: enero-2015
Ubicación: Uruguay
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Pregunta No puedo hacer 2 JOIN con la misma tabla!

Hola buenos días para todos en ForosDelWeb, me presento soy QuetzalMeneghetti y admiro este gran foro que más de una vez me ha ayudado con el tema de programación web y siempre quise ser usuario del mismo para ayudar tanto como me ayudaron ...

Hoy tengo un problema en algo que soy muy principiante que es MySQL y el tema es que tengo un consulta mysql en la cual después de un SELECT tengo problema al crear 2 JOIN con la misma tabla de referencia principal o como se diga, el tema es me lanza el error: #1054 - Unknown column '02_Pacientes.id_Paciente' in 'on clause'

Código SQL:
Ver original
  1. SELECT  `03_Recibos`.`id_Paciente` , CONCAT(  `02_Pacientes`.`Apellido1` ,  ', ',  `02_Pacientes`.`Nombre` ) Paciente, CONCAT(`02_Pacientes`.`TE01`, ', ', `02_Pacientes`.`TE02`) NrosTelefonicos, `02_Consultorios`.`descconsul` Consultorio, CONCAT(  `Personal`.`Apellido` ,  ', ',  `Personal`.`Nombre` ) Secretario,  `03_Recibos`.`fecvto`, `Morosos`.`descripcion` Acuerdo
  2. FROM  `03_Recibos`
  3.  
  4. JOIN  `Morosos` ON  `02_Pacientes`.`id_Paciente` =  `Morosos`.`id_Paciente`
  5. JOIN  `02_Pacientes` ON  `02_Pacientes`.`id_Paciente` =  `03_Recibos`.`id_Paciente`
  6. JOIN  `02_Consultorios` ON  `02_Pacientes`.`id_Consultorio` =  `02_Consultorios`.`id_Consultorio`
  7. JOIN  `Personal` ON  `02_Consultorios`.`id_Personal` =  `Personal`.`id_Personal`
  8. WHERE DATEDIFF( CURRENT_DATE,  `03_Recibos`.`fecvto` ) >=35
  9. AND (
  10. `02_Consultorios`.`id_Personal` =11
  11. OR  `02_Consultorios`.`id_Personal` =14
  12. OR `02_Consultorios`.`id_Personal` =19
  13. )
  14. AND  `03_Recibos`.`estado` =2
  15. AND  `02_Pacientes`.`Activo` <>  'NO'
  16. AND  `02_Pacientes`.`Tipo_Paciente` <>2
  17. GROUP BY  `03_Recibos`.`id_Paciente`
  18. HAVING MIN(  `03_Recibos`.`fecvto` )
  19. ORDER BY  `03_Recibos`.`fecvto`
[/CODE]

Lo que yo quiero es que aparezca el acuerdo(descripcion) correspondiente con cada paciente... y que en caso de que halla más de un acuerdo por paciente también los muestre.

Desde ya muchas Gracias por el apoyo y sigan así!
Saludos, Quetzal

Última edición por gnzsoloyo; 30/01/2015 a las 17:42
  #2 (permalink)  
Antiguo 30/01/2015, 17: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, 4 meses
Puntos: 2658
Respuesta: No puedo hacer 2 JOIN con la misma tabla!

El problema es simplemente que la tabla 02_Pacientes no tiene ninguna columna denominada "id_Paciente", o al menos MySQL no la encuentra.
Usualmente puede ser un simple error de escritura, pero también podría ser causado por correr el servicio sobre Linux en algunos cassos.
Lo más simple es que empecemos verificando el nombre.
Postea el resultado de esto:
Código MySQL:
Ver original
  1. SHOW CREATE TABLE `02_Pacientes`

Por otro lado te recomiendo enfáticamente jamás poner nombres de tablas, bases, columnas o cualquier otro componente de base en MySQL con números al principio.
Es una práctica espantosa, que puede causar fácilmente errores si te olvidas los acentos agudos, ya que en MySQL no se admiten números como inicio del nombre de los objetos de base.
__________________
¿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 30/01/2015, 18:31
 
Fecha de Ingreso: enero-2015
Ubicación: Uruguay
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: No puedo hacer 2 JOIN con la misma tabla!

Muchas Gracias gnzsoloyo por intentar ayudarme, lo de los numeros al comienzo lo tendre en cuenta para las proximas tablas que realize. Comprobe que la tabla id_Pacientes existe y si existe...

El resultado de lo que me pasaste para que pasara por el SQL de mi servidor es:

Código MySQL:
Ver original
  1. CREATE TABLE `02_Pacientes` (
  2.  `id_paciente` int(5) unsigned zerofill NOT NULL,
  3.  `Foto` char(20) COLLATE utf8_spanish_ci NOT NULL,
  4.  `Fecha_Alta` date NOT NULL,
  5.  `id_Consultorio` int(3) unsigned zerofill NOT NULL,
  6.  `Tipo_Paciente` int(2) unsigned zerofill NOT NULL,
  7.  `Apellido1` char(30) COLLATE utf8_spanish_ci NOT NULL,
  8.  `Apellido2` char(30) COLLATE utf8_spanish_ci NOT NULL,
  9.  `Nombre` char(30) COLLATE utf8_spanish_ci NOT NULL,
  10.  `TipDoc` int(2) unsigned zerofill NOT NULL,
  11.  `NumDoc` char(8) COLLATE utf8_spanish_ci NOT NULL,
  12.  `CalleNro` char(30) COLLATE utf8_spanish_ci NOT NULL,
  13.  `Provincia` int(2) unsigned zerofill NOT NULL,
  14.  `LocaPara` char(20) COLLATE utf8_spanish_ci NOT NULL,
  15.  `Cod_Postal` char(10) COLLATE utf8_spanish_ci NOT NULL,
  16.  `TE01` char(20) COLLATE utf8_spanish_ci NOT NULL,
  17.  `TE02` char(20) COLLATE utf8_spanish_ci NOT NULL,
  18.  `Email` char(50) COLLATE utf8_spanish_ci NOT NULL,
  19.  `Activo` varchar(2) COLLATE utf8_spanish_ci NOT NULL,
  20.  `Indice` int(10) NOT NULL AUTO_INCREMENT,
  21.  PRIMARY KEY (`Indice`)
  22. ) ENGINE=MyISAM AUTO_INCREMENT=5242 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci


Espero que me puedas ayudar, desde ya muchas Gracias! Quetzal

Última edición por gnzsoloyo; 30/01/2015 a las 18:40
  #4 (permalink)  
Antiguo 30/01/2015, 18:51
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: No puedo hacer 2 JOIN con la misma tabla!

Para mi existen dos posibilidades:
1) El orden de las tablas, porque estás invocando ese campo antes de que la tabla sea leída.
2) Estás trabajando en MySQL sobre un servidor con Linux, caso en el cual el sistema se vuelve sensible a Mayusculas/minúsculas.

Veamos el primer caso:
Código MySQL:
Ver original
  1.     R.`id_Paciente` ,
  2.     CONCAT(P.`Apellido1` ,  ', ',  P.`Nombre` ) Paciente,
  3.     CONCAT(P.`TE01`, ' / ', P.`TE02`) NrosTelefonicos,
  4.     C.`descconsul` Consultorio,
  5.     CONCAT(P.`Apellido` ,  ', ',  P.`Nombre` ) Secretario,  
  6.     R.`fecvto`,
  7.     M.`descripcion` Acuerdo
  8. FROM  `02_Pacientes` P
  9.     INNER JOIN `03_Recibos` R ON  P.`id_Paciente` =  R.`id_Paciente`
  10.     INNER JOIN  `Morosos` M ON  P.`id_Paciente` =  M.`id_Paciente`
  11.     INNER JOIN  `02_Consultorios` C ON  P.`id_Consultorio` =  C.`id_Consultorio`
  12.     INNER JOIN  `Personal` PE ON  C.`id_Personal` =  PE.`id_Personal`
  13.     DATEDIFF(CURDATE(),  R.`fecvto`) >= 35
  14.     AND (  C.`id_Personal` = 11
  15.         OR C.`id_Personal` = 14
  16.         OR C.`id_Personal` = 19)
  17.     AND  R.`estado` = 2
  18.     AND  P.`Activo` <>  'NO'
  19.     AND  P.`Tipo_Paciente` <> 2
  20. GROUP BY  R.`id_Paciente`
  21. HAVING MIN(R.`fecvto`)
  22. ORDER BY  R.`fecvto`
Si esto falla, entonces puede que sea lo el Linux.
__________________
¿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 30/01/2015, 20:47
 
Fecha de Ingreso: enero-2015
Ubicación: Uruguay
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: No puedo hacer 2 JOIN con la misma tabla!

Muchas Gracias por tu ayuda me sirvio a la perfección!
Realmente estaba trabado en ese problema hacia horas, tengo una pregunta más y te dejo en paz, en caso de halla más de un acuerdo por cada id_paciente se mostrarian? Muchisimas Gracias, Saludo, Quetzal...
  #6 (permalink)  
Antiguo 30/01/2015, 21: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, 4 meses
Puntos: 2658
Respuesta: No puedo hacer 2 JOIN con la misma tabla!

No con esa consulta.
En este caso estás consolidando datos por paciente, lo que implica que sólo discriminará los pacientes. Si quieres que discrimine acuerdos por paciente, tienes que incluir los acuerdos dentro del agrupamiento.
Vale decir, sería una consulta agrupada por dos columnas:

Código MySQL:
Ver original
  1. GROUP BY  R.`id_Paciente`, M.`descripcion`
__________________
¿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: joins, sql
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 19:01.