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

Consultar 3 tablas con JOIN

Estas en el tema de Consultar 3 tablas con JOIN en el foro de Mysql en Foros del Web. Hola! Tengo un problema parecido y escribo aqui para ver si entre los dos me pueden ayudar: Resulta que necesito hacer dos consultas en una, ...
  #1 (permalink)  
Antiguo 14/07/2011, 09:18
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 14 años, 9 meses
Puntos: 2
Exclamación Consultar 3 tablas con JOIN

Hola! Tengo un problema parecido y escribo aqui para ver si entre los dos me pueden ayudar:

Resulta que necesito hacer dos consultas en una, y como lo estan haciendo con inner join me gustaria saber como seria adaptar estas dos consultas en una. La consulta general que quiero hacer es sumar las horas de los empleados que participan en un proyecto, pero para ello, primero consulte todos los empleados que pertenecen a una disciplina y oficina. Luego tomo en una variable (donde se encuentran todos los codigos) y luego hago otra consulta (casi hago el mismo filtro :( ) pero incluyendo la condición que el código del empleado que obtuve en la primera consulta me lo compare con el codigo del empleado de la tabla PARTICIPA.

aqui las dos consultas:

query1 = "SELECT Codigo
FROM dbo.SPO2_Empleado
WHERE Nombre_Disciplina = '" . $dis_select . "'
AND Codigo_Oficina = '" . $ofic_select . "' ";

query2 = "SELECT SUM(PA.Cantidad_Horas)Horas
FROM dbo.SPO2_Participa PA, dbo.SPO2_Empleado EM, dbo.SPO2_Proyecto P
WHERE PA.Codigo_Empleado = '" . $codigo_Empleado . "'
AND P.Codigo = PA.Codigo_Evento
AND EM.Nombre_Disciplina = '" . $dis_select . "'
AND EM.Codigo_Oficina = '" . $ofic_select . "'
Group by PA.Codigo_Empleado";

mi pregunta es si lo siguiente que estoy intentando es la forma correcta de hacerlo:

query = "SELECT SUM(PA.Cantidad_Horas)Horas
INNER JOIN dbo.SPO2_Participa PA on dbo.SPO2_Proyecto P
INNER JOIN
(SELECT Codigo
FROM dbo.SPO2_Empleado
WHERE EM.Nombre_Disciplina = '" . $dis_select . "'
AND EM.Codigo_Oficina = '" . $ofic_select . "')C
ON

C.Codigo = PA.Codigo_Empleado
Group by PA.Codigo_Empleado";

pero necesito comparar esto: PA.Codigo_Evento = P.Codigo ->> donde lo coloco?

__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #2 (permalink)  
Antiguo 14/07/2011, 11:02
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consultar 3 tablas con JOIN

Hola eliza_ralves:

No termino de entender qué es lo que estás tratando de hacer... si se trata de hacer la unión entre las tablas utilizando INNER JOIN, a partir de tu QUERY2
sería más o menos así:

Código:
SELECT PA.Codigo_Empleado SUM(PA.Cantidad_Horas) Horas
FROM dbo.SPO2_Participa PA
INNER JOIN dbo.SPO2_Empleado EM 
ON PA.Codigo_Empleado = EM.Codigo
INNER JOIN dbo.SPO2_Proyecto P
ON P.Codigo = PA.Codigo_Evento
WHERE 
PA.Codigo_Empleado = '" . $codigo_Empleado . "' AND 
EM.Nombre_Disciplina = '" . $dis_select . "' AND 
EM.Codigo_Oficina = '" . $ofic_select . "' 
Group by PA.Codigo_Empleado"
Si esto no es lo que quieres, te recomendaría que comenzaras por explicarnos cuál es la estructura de tus tablas, por qué campos están relacionadas y de ser posible que incluyas algunos datos de ejemplo, para poder hacer pruebas.

Saludos.
Leo
  #3 (permalink)  
Antiguo 14/07/2011, 12:12
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Consultar 3 tablas con JOIN

Hola! Lo que trato de hacer es obtener para cada uno de los empleados de pertenezcan a una disciplina y oficina especifica, la suma de las horas qeu me trae la comparación de dicha lista con los que estan en la tabla participa.

es decir, lo que trataba de hacer en un principio era obtener los codigos de todos los empleados que cumplían la condición de pertenecer a una disciplina y oficina.

Luego obteniendo la lista de codigos, comparar con los codigos de los empleados que se encuentran participando (tabla participa) en un proyecto (P.cod_proyecto = PA.cod_Evento), y dado esto, obtener la suma de la cantidad_horas de cada empleado.


La estructura de tablas es la siguiente:

Tabla Empleado: codigo, nombre_disciplina, codigo_oficina

Tabla Proyecto: codigo

Tabla Participa: codigo_empleado, codigo_evento,cantidad_horas.

Espero me hayas entendido.


EDIT: Disculpa leonardo_josue, me fui de golpe respoonder sin porbar el código. Ofrezco disculpas. Si funciona lo que me colocas arriba. sólo que le quite la opción del codigo del empleado, ya que si filtro por disciplina y oficina, me devuelve todos los empleados que cumplan esa condición. Pero me va a servir para otra condicion que tengo.

=D

De nuevo, disculpas!
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking

Última edición por eliza_ralves; 14/07/2011 a las 12:43 Razón: Disculpas

Etiquetas: consultar, join, query, select, tabla, tablas
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 23:51.