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

Consulta UNION ALL duplica registros

Estas en el tema de Consulta UNION ALL duplica registros en el foro de Mysql en Foros del Web. Cordial saludo. Tengo una tabla llamada funcionario, departamentos y dependencias con los siguientes campos: ---------------------- funcionario ---------------------- cod_fun nombres apellidos numdoc cod_dep cod_depen ---------------------- dependencias ...
  #1 (permalink)  
Antiguo 01/09/2015, 18:57
 
Fecha de Ingreso: enero-2010
Ubicación: Colombia
Mensajes: 238
Antigüedad: 14 años, 3 meses
Puntos: 2
Consulta UNION ALL duplica registros

Cordial saludo. Tengo una tabla llamada funcionario, departamentos y dependencias con los siguientes campos:

----------------------
funcionario
----------------------
cod_fun
nombres
apellidos
numdoc
cod_dep
cod_depen

----------------------
dependencias
----------------------
cod_depen
dtalle_depen

----------------------
departamentos
----------------------
cod_dep
dtalle_dep

Lo que pasa es que tengo 15 usuarios en la tabla funcionario y 4 de ellos tienen el campo cod_depen en 0 ya que no pertenecen a ninguna dependencia. Estoy tratando de hacer una consulta donde me traiga todos los funcionarios tengan o no dependencia, al hacer la consula completa solo me lista los que tienen algun valor en cod_depen, intento hacer dos consultas diferentes y unirlas con UNION ALL y lo que hace es listar primero todos los funcionarios ya que todos tienen departamento(cod_dep) y seguido me lista todos los funcionarios que tiene dependencia(cod_depen) duplicando los registros y me arroja 26 en total. ¿Alguien me puede guiar un poco sobre si es posible realizar lo que necesito? gracias:
Código SQL:
Ver original
  1. SELECT funcionario.cod_fun,funcionario.nombres,funcionario.apellidos,funcionario.numdoc,funcionario.cod_dep,
  2.                  departamentos.cod_dep,departamentos.dtalle_dep
  3.           FROM  funcionario,departamentos
  4.           WHERE funcionario.cod_dep=departamentos.cod_dep
  5.     UNION ALL
  6.     SELECT funcionario.cod_fun,funcionario.nombres,funcionario.apellidos,funcionario.numdoc,
  7.                  funcionario.cod_depen,dependencias.cod_depen,dependencias.dtalle_depen
  8.           FROM  funcionario,dependencias
  9.           WHERE funcionario.cod_depen=dependencias.cod_depen;

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

http://i61.tinypic.com/w0qp2q.png

Última edición por gnzsoloyo; 01/09/2015 a las 19:30 Razón: Imagen
  #2 (permalink)  
Antiguo 01/09/2015, 19:36
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: Consulta UNION ALL duplica registros

Cita:
lo que hace es listar primero todos los funcionarios ya que todos tienen departamento(cod_dep) y seguido me lista todos los funcionarios que tiene dependencia(cod_depen) duplicando los registros y me arroja 26 en total.
La duplicación de registros iguales en un UNION ALL es el resultado normal y esperado de esa forma de UNION.
Si quieres que los registros no se repitan, debes usar UNION, no UNION ALL.

Cita:
Lo que pasa es que tengo 15 usuarios en la tabla funcionario y 4 de ellos tienen el campo cod_depen en 0 ya que no pertenecen a ninguna dependencia. Estoy tratando de hacer una consulta donde me traiga todos los funcionarios tengan o no dependencia,
Pues para obtener esa lista, tal y como la describes, simplemente sería omitiendo la condicion sobre el COD_DEPEN, al menos si lo haces en una sola tabla.
Para hacerlo con un JOIN debes usar LEF>T JOIN.
Código MySQL:
Ver original
  1. SELECT F.cod_fun, F.nombres, F.apellidos, F.numdoc, F.cod_dep, D.cod_dep, D.dtalle_dep
  2. FROM  funcionario F LEF JOIN departamentos F ON F.cod_dep = D.cod_dep
  3. WHERE 1 OR D.cod_dep  IS NULL
__________________
¿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: campo, php, registro, registros, select, sql, tabla, union
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 18:26.