Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/04/2014, 17:09
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problemas con UNION ALL

Tienes dos errores:
1) Una tabla derivada es lo que se genera cuando pones una subconsulta en el FROM de una consulta. El resultado de esa subconsulta es una tabla que deriva de ella. y Obligatoriamente, y en todos los DBMS una tabla derivada debe tener un alias. Siempre.
2) El UNION es la suma de los resultados de una consulta, con los resultados de otra, pero tienen como condición obligatoria que ambas consultas devuelvan la misma cantidad de campos en cada SELECT, del mismo tipo de columna y en el mismo orden. Nada de eso lo estás respetando en tu consulta.
Esto esta mal:
Código MySQL:
Ver original
  1.     *
  2.     (SELECT
  3.         tl.idperson,
  4.             tl.firstName,
  5.             tl.lastName,
  6.             tl.telephone,
  7.             tl.degreeOfInterest,
  8.             l.appointmentDate,
  9.             e.firstName,
  10.             i.marketability
  11.     FROM
  12.         `todos_los_leads` AS tl
  13.     INNER JOIN leads AS l ON tl.idperson = l.idPerson
  14.     INNER JOIN empleados AS e ON tl.idEmployee = e.idEmployee
  15.     INNER JOIN infonavit AS i ON tl.idInfonavit = i.idInfonavit
  16.     UNION ALL
  17.     SELECT
  18.         s.monthlyIncome
  19.     FROM
  20.         `todos_los_leads` AS tl
  21.     INNER JOIN shf AS s ON tl.idSHF = s.idSHF)
Como mínimo debería ser:
Código MySQL:
Ver original
  1.     T1.*
  2.     (SELECT
  3.         tl.idperson,
  4.             tl.firstName,
  5.             tl.lastName,
  6.             tl.telephone,
  7.             tl.degreeOfInterest,
  8.             l.appointmentDate,
  9.             e.firstName,
  10.             i.marketability
  11.     FROM
  12.         `todos_los_leads` tl
  13.     INNER JOIN leads l ON tl.idperson = l.idPerson
  14.     INNER JOIN empleados e ON tl.idEmployee = e.idEmployee
  15.     INNER JOIN infonavit i ON tl.idInfonavit = i.idInfonavit ) T1

El problema es que esta parte no encaja en la subconsulta de ninguna forma con un UNION ALL:
Código MySQL:
Ver original
  1.     SELECT s.monthlyIncome
  2.     FROM `todos_los_leads` tl
  3.     INNER JOIN shf s ON tl.idSHF = s.idSHF
¿Qué es lo que se supone que quieres vincular con ese UNION ALL?
Pregunto porque el campo "monthlyIncome" no aparece en la lista del SELECT de la primera parte de la consulta, por lo que no puedes encolumnarlo con nada.
¿Qué relación hay entre ambas partes?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)