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

Full outer join..???...

Estas en el tema de Full outer join..???... en el foro de Mysql en Foros del Web. Buenas Tardes a todos: No se ni que titulo ponerle al tema, porke realmente no se ke es lo que necesito para solucionar mi problema ...
  #1 (permalink)  
Antiguo 13/05/2011, 12:56
 
Fecha de Ingreso: julio-2009
Mensajes: 29
Antigüedad: 15 años
Puntos: 1
Full outer join..???...

Buenas Tardes a todos:

No se ni que titulo ponerle al tema, porke realmente no se ke es lo que necesito para solucionar mi problema ... Asi que les comento que es lo que quiero:

Necesito asignar centros de costos a diferentes elementos de una empresa (entiéndase impresoras, celulares o incluso empleados)... Para almacenar la informacion de cada uno de ellos tengo dos tablas:

Cita:
Empleados--> (cedula, nombre, cargo...etc)
Elementos--> (idTipoElemento, placa_serial, ubicacion... etc)
Tipo Elemento-->(idTipoElemento, descripcion)
Par asignar los centros de costos tengo dos tablas:

Cita:
distribucionCC--> (idTipoDistribucion, identificacion (aki iria la cedula del empleado o la placa_serial del elemento), centroCosto, porcentaje)
tipoDistribucionCC--> (idTipoDistribucion, descripcion)
Y tengo la siguiente vista, donde uno la informacion que necesito de la tabla de empleados y de elementos:

Código MySQL:
Ver original
  1. (select `empleados`.`cedula` AS `identificacion`,
  2. `empleados`.`nombre` AS `descripcion`,_utf8'Empleado' AS `tipo`
  3. from `empleados`)
  4.  (select `elemento`.`placa_serial` AS `identificacion`,
  5. `elemento`.`descripcion` AS `descripcion`,
  6. `tipoelemento`.`descripcion` AS `tipo`
  7. from (`elemento` join `tipoelemento`
  8. on((`elemento`.`id_tipoElemento` = `tipoelemento`.`id_tipoElemento`))))

Que me mostraria algo asi:

identificacion --- descripcion ----------------- tipo
1112765369 -----Ana Maria-------------------- Empleado
24365298--------Juan Manuel-------------------Empleado
XVG-253---------Impresora Laser--------------- Impresora
XHJK-21L--------Telefono IP Recepcion---------- Telefonos IP

Dentro de mi aplicacion llego a una parte donde sigo los siguientes pasos:
  • Selecciono el tipo de distribucion que deseo.
  • De un listado donde me muestra los tipos de elementos a los que deseo aplicarle la distribucion de centro de costos, selecciono los que deseo (empleados, impresoras, etc).

Aqui es donde no se ke hacer... Una vez seleccionados los tipos de elementos... Yo quierouna consulta donde me muestre todos los elementos de la vista que coincidan con el tipo de elemento, pero que a la vez busque en la tabla de distribucionCC, y me vaya diciendo si el elemento ya aparece o no dentro de la distribucion, (esto lo haria buscando en el campo identificacion de la tabla distribucionCC).

algo asi:
Cita:
identificacion --- descripcion ----------------- tipo------aparece
1112765369 -----Ana Maria-------------------- Empleado------SI
24365298--------Juan Manuel-------------------Empleado-----NO
XVG-253---------Impresora Laser--------------- Impresora------SI
Pero no se ke hacer, lo he intentando cambiando la clausula JOIN de varias formas (incluso simulando un FULL OUTER JOIN, que crei ke me funcionaria), y solo es que ponga la clausula WHERE idTipoDistribucion = 1 o a lo que sea... Y solo me muestra los elementos que ya tiene esa distribucion... Pero yo quiero ke me muestre todos los elementos de la vista y me diga cuales ya aparecen dentro de la distribucion que seleccione...

AAAYYYYYYYYY no se si me entiendan o ke mas informacion necesitan... Pero quiero ke me den ideas o no se...
  #2 (permalink)  
Antiguo 13/05/2011, 14:26
 
Fecha de Ingreso: julio-2009
Mensajes: 29
Antigüedad: 15 años
Puntos: 1
Respuesta: Full outer join..???...

Bueno, me respondo a mi misma... La consulta me quedo asi:

Código MySQL:
Ver original
  1. `vistaUnion`.identificacion,
  2. `vistaUnion`.descripcion,
  3. `vistaUnion`.tipo,
  4. SUM(porcentaje) as porcentaje, "SI" as esta
  5. `vistaUnion`
  6. RIGHT JOIN distribucioncc ON `vistaUnion`.identificacion = distribucioncc.identificacion
  7. WHERE `vistaUnion`.identificacion IN(SELECT distribucioncc.identificacion FROM distribucioncc)
  8. AND distribucioncc.id_tipoDist = 1
  9. GROUP BY `vistaUnion`.identificacion, `vistaUnion`.descripcion, `vistaUnion`.tipo
  10. `vistaUnion`.identificacion,
  11. `vistaUnion`.descripcion,
  12. `vistaUnion`.tipo,
  13. SUM(porcentaje) as porcentaje, "NO" as esta
  14. `vistaUnion`
  15. LEFT JOIN distribucioncc ON `vistaUnion`.identificacion = distribucioncc.identificacion
  16. WHERE `vistaUnion`.identificacion NOT IN(SELECT distribucioncc.identificacion
  17. FROM distribucioncc WHERE distribucioncc.id_tipoDist = 1)
  18. GROUP BY `vistaUnion`.identificacion, `vistaUnion`.descripcion, `vistaUnion`.tipo

Y segun yo... lo que hace es que en el primer SELECT me muestra todos los registros que estan tanto en la vista como en mi tabla de distribucionCC y que el tipo de distribucion sea igual al parametro enviado...

En mi segundo SELECT hago todo lo contrario... me muestra todos los registros de mi vista que no aparecen en la tabla de distribucionCC...

Asi se que elementos puedo agregar o no a mi tabla de distribucionCC...

Quizas esto le pueda servir a alguien..

Etiquetas: full, join, outer
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 12:15.